ON MOUSE(n) GOSUBについて

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
T.O.T.

ON MOUSE(n) GOSUBについて

#1 投稿記事 by T.O.T. »

初めまして。最近、ActiveBasic を始めました。超初心者です。
宜しくお願いします。

わからない事があります。質問させて下さい。
勉強の一環で、N88BASICのプログラムをActiveBasicに置き換えるというような
事をしています。
”Mouse (n) on”や”On Mouse(n) GoSub”を使ったところエラーメッセージが
出てしまいました。
以下、エラーメッセージ。

エラーメッセージ” "mouse" 無効な識別子です”


”Mouse (n) on”や”On Mouse(n) Go Sub”はActiveBasic ではもう使えないのでしょうか?
使えないのであれば、代わりになるような構文があるのであれば教えて下さい。

ちなみに、マウスの右クリック(もしくは左クリック)で、指定先(行番号)に移動する、
というような事をやろうとしています。

以下、環境。
Win XP
Version: 4.12.01


以上、宜しくお願いします。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: ON MOUSE(n) GOSUBについて

#2 投稿記事 by hira »

Ver 2では使えますが、Ver 3以降では使えません。
Ver 3以降で使う場合は、WindowsのAPIなどの力を借りて強引に実装するしかないでしょう。 この例では、起動してから5秒間まではマウスの左ボタンが押された時にメッセージを表示します(5秒を過ぎると押してもメッセージは出ません)。
マウス移動は「Case WM_MOUSEMOVE」の下、左ダウンは「Case WM_LBUTTONDOWN」の下、右ダウンは「Case WM_RBUTTONDOWN」の下、左アップはCase WM_LBUTTONUP」の下、右アップは「Case WM_RBUTTONUP」の下にそれぞれ記述してください。
なお、指定先の行番号に飛ぶ…といったことはこの方法ではできません。ただし、やりたいことを指定箇所に記述することで代用できることがあります。
※難しすぎたかもしれませんが…(^^;
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

Re: ON MOUSE(n) GOSUBについて

#3 投稿記事 by 淡幻星 »

その後、気付いて投稿したのですが、ギリギリ僕が早かったようですね。
入れ違いになってしまいましたね^^;
失礼しました。
Ver.4 では、同等の機能をもつプログラムは作れないのですか??
答えとしては「作れます。より高性能なものが作れます。」になります。
私の答えの言葉が足りなかったですね、すいません。
「N88Basicスタイルでマウスを扱いたいのであれば、ActiveBasicのVer.2をお勧めします」とのつもりで書きました。N88スタイルに拘らないのであれば、Ver.4で問題ありません。それどころか、できることがずっと多くなっていますので当然Ver.4をお勧めします。ただしその場合は、ウィンドウメッセージを理解する必要が出てきます(≒RADでコーデック、って思ってください。参照:ヘルプセンターのWin32プログラミング講座。でもそちらでマウスイベントの説明はないですね^^;)。


Ver.4のプロンプト画面(N88スタイル)でもマウスを扱えないことはないのですが、裏技みたいなことをやる必要があるのでお勧めしません・・・が、やるとしたらhiraさんが既に答えてくださった方法になります。

hiraさんの説明をN88風に補足させていただきますと、

コード: 全て選択

lpPrevWndProc=SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,AddressOf(MouseProc))
が[On Mouse GoSub *label]+[Mouse On]に相当し、

コード: 全て選択

SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,lpPrevWndProc)
が[Mouse Off]に相当します。

コード: 全て選択

Function MouseProc ~ EndFunctoin
*label先に相当し、マウス割り込みが発生したときの動作を記述する場所です。
しかしこれが果たしてN88スタイルかと疑問なので、「裏技」と呼びました^^;
T.O.T.

Re: ON MOUSE(n) GOSUBについて

#4 投稿記事 by T.O.T. »

hiraさん、淡幻星さん大変ありがとうございます!!
AB本買ったんですが、全然わからないし、聞く人いないし・・・
ちょっと、救われました。

hiraさん:
プログラムのサンプルを作ってもらえるとは思ってませんでした。
いや~、ありがとうございます。

淡幻星さん:
余計な気を使わせて申し訳ないです。
それと僕も言葉が足りなかったようです。
おっしゃるとうり、N88BASIC には余り拘りがないです。

WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP等は投稿後、
このサイトのヘルプセンターで調べて知りました。
ただ、具体的な使い方がわからなかったので、助かりました。
とりあえず、素人ながら目的は達成できました。


ついでに、質問していいですか??
このサイトのヘルプセンターで調べてみたら他に、イベントの
RButtonUp等がありました。
WM_LBUTTONDOWN等は、ウィンドウメッセージというくくりに
なっていたので、違う機能なんだというのはわかります。
ON MOUSE(n) GOSUB を RButtonUp等 に置き換えることはできないんですか??


以上、宜しくお願いします。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

Re: ON MOUSE(n) GOSUBについて

#5 投稿記事 by NoWest »

> hiraさん、淡幻星さん大変ありがとうございます!!
> AB本買ったんですが、全然わからないし、聞く人いないし・・・
> ちょっと、救われました。

> hiraさん:
> プログラムのサンプルを作ってもらえるとは思ってませんでした。
> いや~、ありがとうございます。
>
> 淡幻星さん:
> 余計な気を使わせて申し訳ないです。
> それと僕も言葉が足りなかったようです。
> おっしゃるとうり、N88BASIC には余り拘りがないです。
>
> WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP等は投稿後、
> このサイトのヘルプセンターで調べて知りました。
> ただ、具体的な使い方がわからなかったので、助かりました。
> とりあえず、素人ながら目的は達成できました。
リファレンスではあるけれどサンプルは少ないですからね。
そのようなときこそこの掲示板を使ってください。
> ついでに、質問していいですか??
> このサイトのヘルプセンターで調べてみたら他に、イベントの
> RButtonUp等がありました。
> WM_LBUTTONDOWN等は、ウィンドウメッセージというくくりに
> なっていたので、違う機能なんだというのはわかります。
> ON MOUSE(n) GOSUB を RButtonUp等 に置き換えることはできないんですか??
WM_LBUTTONDOWNメッセージと同じようにWM_LBUTTONUPメッセージがあります。

マウスの左ボタンが押されたときにWM_LBUTTONDOWN、戻ったときにWM_LBUTTONUPがOSから送られてきます。


基本的にマウスイベントメッセージのボタン関連には

WM_LBUTTON
WM_MBUTTON
WM_RBUTTON

の3種類があってそれぞれ左ボタン、中ボタン、右ボタンに対応しています。



また、それぞれの後ろには

UP
DOWN
DBLCLK

の動きを表す文字がくっつきます。


つまり、この6つの文字の組み合わせでマウスのボタン操作を表します。




マウスの左ボタンのダブルクリックのメッセージは
WM_LBUTTON + DBLCLK で WM_LBUTTONDBLCLK
T.O.T.

Re: ON MOUSE(n) GOSUBについて

#6 投稿記事 by T.O.T. »

NoWestさん、ありがとうございます。
助かります。

すいません、僕の説明が悪いのか、理解できていないのか、
多分、両方だと思いますが・・・
もうちょっと付き合って下さい。


ヘルプセンターで”BUTTON”で検索をかけたら、
以下が引っかかりました。

ウィンドウメッセージ:WM_RBUTTONUP
ウィンドウメッセージ:WM_RBUTTONDOWN
ウィンドウメッセージ:WM_RBUTTONDBLCLK
(同様にLBUTTON、MBUTTON があります。)

そしてこの他に、以下がありました。

イベント:RButtonUp
イベント:RButtonDown
イベント:RButtonDblClick
(同様にLBUTTON、MBUTTON があります。)




この”イベント:RButton”では、”ON MOUSE(n) GOSUB”の
かわりにはならないのですか??
できれば”イベント:RButton”の使い方を教えてください。


宜しくお願いします。
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#7 投稿記事 by マティ »

ウィンドウプログラムで実装するなら、Win32プログラミング講座 ~ Step5. ボタン コントロールを使う ~を参考にしてください。(ボタンの制御を行なっています。)

上記で作成したウィンドウのボタン以外の場所で、右クリックを行なうと、そのウィンドで処理可能なメッセージの一覧を表示しますので、必要なイベントを選択して下さい。
RADツールがそのイベントを処理するサブルーチンを作成してくれます。
イベントを処理するサブルーチンに、処理内容を記載するだけて処理は完成します。

分かりにくいとは思いますが、実行してみて下さい。
T.O.T.

Re: ON MOUSE(n) GOSUBについて

#8 投稿記事 by T.O.T. »

マティさん、どうもありがとうございます。

どうやら、すぐ理解するのは難しそうですね・・・
ちょっとじっくり考えながらやってみようと思います。


僕のしょぼい質問に丁寧に答えてくれたみなさん、
ありがとうございます。
また、質問させてもらうときがくると思いますので、
そのときはまた、宜しくお願いします。
返信する