初めまして。最近、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
以上、宜しくお願いします。
ON MOUSE(n) GOSUBについて
Re: ON MOUSE(n) GOSUBについて
Ver 2では使えますが、Ver 3以降では使えません。
Ver 3以降で使う場合は、WindowsのAPIなどの力を借りて強引に実装するしかないでしょう。
マウス移動は「Case WM_MOUSEMOVE」の下、左ダウンは「Case WM_LBUTTONDOWN」の下、右ダウンは「Case WM_RBUTTONDOWN」の下、左アップはCase WM_LBUTTONUP」の下、右アップは「Case WM_RBUTTONUP」の下にそれぞれ記述してください。
なお、指定先の行番号に飛ぶ…といったことはこの方法ではできません。ただし、やりたいことを指定箇所に記述することで代用できることがあります。
※難しすぎたかもしれませんが…(^^;
Ver 3以降で使う場合は、WindowsのAPIなどの力を借りて強引に実装するしかないでしょう。
[ここをクリックすると内容が表示されます]
この例では、起動してから5秒間まではマウスの左ボタンが押された時にメッセージを表示します(5秒を過ぎると押してもメッセージは出ません)。コード: 全て選択
#N88BASIC
Dim lpPrevWndProc As VoidPtr
Function MouseProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As LRESULT
Select Case dwMsg
Case WM_MOUSEMOVE
Case WM_LBUTTONDOWN
MsgBox 0,"test"
Case WM_RBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONUP
Case Else
MouseProc=CallWindowProc(lpPrevWndProc,hWnd,dwMsg,wParam,lParam)
End Select
End Function
lpPrevWndProc=SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,AddressOf(MouseProc))
'メインのコードここから
Sleep(5000)
'メインのコードここまで
SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,lpPrevWndProc)
マウス移動は「Case WM_MOUSEMOVE」の下、左ダウンは「Case WM_LBUTTONDOWN」の下、右ダウンは「Case WM_RBUTTONDOWN」の下、左アップはCase WM_LBUTTONUP」の下、右アップは「Case WM_RBUTTONUP」の下にそれぞれ記述してください。
なお、指定先の行番号に飛ぶ…といったことはこの方法ではできません。ただし、やりたいことを指定箇所に記述することで代用できることがあります。
※難しすぎたかもしれませんが…(^^;
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
Re: ON MOUSE(n) GOSUBについて
入れ違いになってしまいましたね^^;その後、気付いて投稿したのですが、ギリギリ僕が早かったようですね。
失礼しました。
答えとしては「作れます。より高性能なものが作れます。」になります。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))
コード: 全て選択
SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,lpPrevWndProc)
コード: 全て選択
Function MouseProc ~ EndFunctoin
しかしこれが果たしてN88スタイルかと疑問なので、「裏技」と呼びました^^;
Re: ON MOUSE(n) GOSUBについて
hiraさん、淡幻星さん大変ありがとうございます!!
AB本買ったんですが、全然わからないし、聞く人いないし・・・
ちょっと、救われました。
hiraさん:
プログラムのサンプルを作ってもらえるとは思ってませんでした。
いや~、ありがとうございます。
淡幻星さん:
余計な気を使わせて申し訳ないです。
それと僕も言葉が足りなかったようです。
おっしゃるとうり、N88BASIC には余り拘りがないです。
WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP等は投稿後、
このサイトのヘルプセンターで調べて知りました。
ただ、具体的な使い方がわからなかったので、助かりました。
とりあえず、素人ながら目的は達成できました。
ついでに、質問していいですか??
このサイトのヘルプセンターで調べてみたら他に、イベントの
RButtonUp等がありました。
WM_LBUTTONDOWN等は、ウィンドウメッセージというくくりに
なっていたので、違う機能なんだというのはわかります。
ON MOUSE(n) GOSUB を RButtonUp等 に置き換えることはできないんですか??
以上、宜しくお願いします。
AB本買ったんですが、全然わからないし、聞く人いないし・・・
ちょっと、救われました。
hiraさん:
プログラムのサンプルを作ってもらえるとは思ってませんでした。
いや~、ありがとうございます。
淡幻星さん:
余計な気を使わせて申し訳ないです。
それと僕も言葉が足りなかったようです。
おっしゃるとうり、N88BASIC には余り拘りがないです。
WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP等は投稿後、
このサイトのヘルプセンターで調べて知りました。
ただ、具体的な使い方がわからなかったので、助かりました。
とりあえず、素人ながら目的は達成できました。
ついでに、質問していいですか??
このサイトのヘルプセンターで調べてみたら他に、イベントの
RButtonUp等がありました。
WM_LBUTTONDOWN等は、ウィンドウメッセージというくくりに
なっていたので、違う機能なんだというのはわかります。
ON MOUSE(n) GOSUB を RButtonUp等 に置き換えることはできないんですか??
以上、宜しくお願いします。
Re: ON MOUSE(n) GOSUBについて
リファレンスではあるけれどサンプルは少ないですからね。> hiraさん、淡幻星さん大変ありがとうございます!!
> AB本買ったんですが、全然わからないし、聞く人いないし・・・
> ちょっと、救われました。
> hiraさん:
> プログラムのサンプルを作ってもらえるとは思ってませんでした。
> いや~、ありがとうございます。
>
> 淡幻星さん:
> 余計な気を使わせて申し訳ないです。
> それと僕も言葉が足りなかったようです。
> おっしゃるとうり、N88BASIC には余り拘りがないです。
>
> WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP等は投稿後、
> このサイトのヘルプセンターで調べて知りました。
> ただ、具体的な使い方がわからなかったので、助かりました。
> とりあえず、素人ながら目的は達成できました。
そのようなときこそこの掲示板を使ってください。
WM_LBUTTONDOWNメッセージと同じようにWM_LBUTTONUPメッセージがあります。> ついでに、質問していいですか??
> このサイトのヘルプセンターで調べてみたら他に、イベントの
> RButtonUp等がありました。
> WM_LBUTTONDOWN等は、ウィンドウメッセージというくくりに
> なっていたので、違う機能なんだというのはわかります。
> ON MOUSE(n) GOSUB を RButtonUp等 に置き換えることはできないんですか??
マウスの左ボタンが押されたときにWM_LBUTTONDOWN、戻ったときにWM_LBUTTONUPがOSから送られてきます。
基本的にマウスイベントメッセージのボタン関連には
WM_LBUTTON
WM_MBUTTON
WM_RBUTTON
の3種類があってそれぞれ左ボタン、中ボタン、右ボタンに対応しています。
また、それぞれの後ろには
UP
DOWN
DBLCLK
の動きを表す文字がくっつきます。
つまり、この6つの文字の組み合わせでマウスのボタン操作を表します。
例
マウスの左ボタンのダブルクリックのメッセージは
WM_LBUTTON + DBLCLK で WM_LBUTTONDBLCLK
Re: ON MOUSE(n) GOSUBについて
NoWestさん、ありがとうございます。
助かります。
すいません、僕の説明が悪いのか、理解できていないのか、
多分、両方だと思いますが・・・
もうちょっと付き合って下さい。
ヘルプセンターで”BUTTON”で検索をかけたら、
以下が引っかかりました。
ウィンドウメッセージ:WM_RBUTTONUP
ウィンドウメッセージ:WM_RBUTTONDOWN
ウィンドウメッセージ:WM_RBUTTONDBLCLK
(同様にLBUTTON、MBUTTON があります。)
そしてこの他に、以下がありました。
イベント:RButtonUp
イベント:RButtonDown
イベント:RButtonDblClick
(同様にLBUTTON、MBUTTON があります。)
この”イベント:RButton”では、”ON MOUSE(n) GOSUB”の
かわりにはならないのですか??
できれば”イベント:RButton”の使い方を教えてください。
宜しくお願いします。
助かります。
すいません、僕の説明が悪いのか、理解できていないのか、
多分、両方だと思いますが・・・
もうちょっと付き合って下さい。
ヘルプセンターで”BUTTON”で検索をかけたら、
以下が引っかかりました。
ウィンドウメッセージ:WM_RBUTTONUP
ウィンドウメッセージ:WM_RBUTTONDOWN
ウィンドウメッセージ:WM_RBUTTONDBLCLK
(同様にLBUTTON、MBUTTON があります。)
そしてこの他に、以下がありました。
イベント:RButtonUp
イベント:RButtonDown
イベント:RButtonDblClick
(同様にLBUTTON、MBUTTON があります。)
この”イベント:RButton”では、”ON MOUSE(n) GOSUB”の
かわりにはならないのですか??
できれば”イベント:RButton”の使い方を教えてください。
宜しくお願いします。
ウィンドウプログラムで実装するなら、Win32プログラミング講座 ~ Step5. ボタン コントロールを使う ~を参考にしてください。(ボタンの制御を行なっています。)
上記で作成したウィンドウのボタン以外の場所で、右クリックを行なうと、そのウィンドで処理可能なメッセージの一覧を表示しますので、必要なイベントを選択して下さい。
RADツールがそのイベントを処理するサブルーチンを作成してくれます。
イベントを処理するサブルーチンに、処理内容を記載するだけて処理は完成します。
分かりにくいとは思いますが、実行してみて下さい。
上記で作成したウィンドウのボタン以外の場所で、右クリックを行なうと、そのウィンドで処理可能なメッセージの一覧を表示しますので、必要なイベントを選択して下さい。
RADツールがそのイベントを処理するサブルーチンを作成してくれます。
イベントを処理するサブルーチンに、処理内容を記載するだけて処理は完成します。
分かりにくいとは思いますが、実行してみて下さい。
Re: ON MOUSE(n) GOSUBについて
マティさん、どうもありがとうございます。
どうやら、すぐ理解するのは難しそうですね・・・
ちょっとじっくり考えながらやってみようと思います。
僕のしょぼい質問に丁寧に答えてくれたみなさん、
ありがとうございます。
また、質問させてもらうときがくると思いますので、
そのときはまた、宜しくお願いします。
どうやら、すぐ理解するのは難しそうですね・・・
ちょっとじっくり考えながらやってみようと思います。
僕のしょぼい質問に丁寧に答えてくれたみなさん、
ありがとうございます。
また、質問させてもらうときがくると思いますので、
そのときはまた、宜しくお願いします。