Last Update : 2008/02/xx
指定したウィンドウメッセージがWindowsから通知された際のラベルジャンプ先を指定しておく命令です。命令名の由来は、「on command」から。
oncmd gosub *ラベル, ウィンドウメッセージ
この命令はHSP3からサポートしたもので、基本的にWin32プログラミングがらみの処理で利用することを想定してます。ウィンドウメッセージについては、Google検索してみてください。
ウィンドウメッセージというのはHSPにない概念ですが、実はHSP2時代からサポートしてるonkey命令(WM_KEYDOWNメッセージ)、onclick命令(WM_LBUTTONDOWN・WM_RBUTTONDOWNメッセージ)、onexit命令(WM_DESTROYメッセージ)は、まさにウィンドウメッセージの割り込みを処理するために用意されている命令です。また、button命令(WM_COMMANDメッセージ)もウィンドウメッセージの処理を行ってます。
ちなみに、oncmd命令は必ずサブルーチンジャンプ処理(「oncmd gosub」〜return命令)のモードで利用してください。通常のラベルジャンプ処理(「oncmd goto」〜stop命令)で利用するシーンはまずないと考えてください。
たとえば、「WM_KEYDOWN」メッセージ(0x0100)は、キーボードのキーが「押し下げ」られた時にWindowsから通知されます。つまり、現在押されているキーが分かります。HSPではこれをonkey命令として提供してました。
// onkey命令 onkey gosub *jump stop *jump mes ""+strf("%c", wparam) return
// WM_KEYDOWNメッセージ #define WM_KEYDOWN $100 oncmd gosub *jump, WM_KEYDOWN stop *jump mes ""+strf("%c", wparam) return
逆に「WM_KEYUP」メッセージ(0x0101)というのも存在し、これはキーボードのキーが「押し上げ」られた時にWindowsから通知されます。つまり、直後まで押されていたキーが分かります。HSPの標準命令では取得できない処理です。
#define WM_KEYUP $101 oncmd gosub *jump, WM_KEYUP stop *jump mes ""+strf("%c", wparam) return
このように今までは、キーボードの押し下げ、マウスクリックボタンの押し下げ、プログラムの終了の3処理分しか用意されていなかったものが、oncmd命令により任意のウィンドウメッセージを取得できるようになりました。
ついでに、ボタンオブジェクト。oncmd命令の通知の後に通常のbutton命令のジャンプ処理が行われます。
#define WM_COMMAND $111 oncmd gosub *jump_oncmd, WM_COMMAND button gosub "ボタン", *jump_button stop *jump_button dialog "button命令 の通知" return *jump_oncmd dialog "oncmd命令 の通知" return
↓HSP3 あれこれのページに登場するサンプルでは、このoncmd命令を当然のごとく登場します。