Last Update : 2007/04/xx
ウィンドウ関連 | ボタン・チェックボックス | 入力ボックス・メッセージボックス | リストボックス・コンボボックス
HSP3(HSP 3.x)のsendmsg命令は、内部でWin32 APIのSendMessage関数を呼んでます。命令名の由来は、この関数名から来てるわけです。そのまま名前のごとく「Message」(メッセージ)を「Send」(送信)する処理を行います。
ちなみに、HSP2(HSP 2.x)では同様の処理を行うobjsend命令が用意されていました(→ HSP 2.xのobjsend命令)。HSP3では単なる命令名の変更だけではなく、第1パラメータ(p1)の部分に仕様の変更があります。ちなみに、第5パラメータ(p5)は存在しません。HSP3.1付属のリファレンスの説明は単なる誤記です。
命令 | p1 | p2 | p3 | p4 | p5 |
HSP3 sendmsg |
ウィンドウハンドル [ hwnd ] | メッセージID [WM_〜 など] |
wParam | lParam | なし |
オブジェクトのウィンドウハンドル [ objinfo(オブジェクトID, 2) ] |
|||||
HSP2 objsend |
ウィンドウID [ -28 ] | メッセージID [WM_〜 など] |
wParam | lParam | p4のタイプ |
オブジェクトID [ 0〜 ] |
sendmsg命令には、4つのパラメータ(引数)が存在します。これはWin32 APIのSendMessage関数のパラメータとまったく同じです。
// SendMessage関数 LRESULT SendMessage( HWND hWnd, // 送信先ウィンドウのハンドル UINT Msg, // メッセージ WPARAM wParam, // メッセージの最初のパラメータ LPARAM lParam // メッセージの2番目のパラメータ );
// sendmsg命令 sendmsg p1, p2, p3, p4
[1] 第1パラメータ
メッセージを送信する対象となる(1)ウィンドウのハンドル値、または(2)オブジェクトのウィンドウハンドル値を指定します。
HSPには、screen命令やbgscr命令に「ウィンドウID」、各種オブジェクトに「オブジェクトID」というものがあります。この数値はスクリプトから呼び出した順に0から始まりますが、あくまでHSPが特別に用意してくれてるものです。
ウィンドウハンドルという値は内部識別番号のようなもので、(1)の自ウィンドウを識別する数値「ウィンドウハンドル」はHSPのシステム変数hwndで取得できます。(2)のオブジェクトを識別する数値「オブジェクトのウィンドウハンドル」はHSPのobjinfo関数で取得できます。
[2] 第2パラメータ
上の第1パラメータで指定したウィンドウ、または各種オブジェクトに対して送信するメッセージID(数値)を指定します。このメッセージIDは、ものすご〜い数(何百個?)が用意されており、たとえばHSPが標準で対応してるオブジェクトのメッセージをMSDNのページ(英語)から拾ってみます。
オブジェクト | MSDN (英語) |
ボタン・チェックボックス | BM_〜 |
入力ボックス・メッセージボックス | EM_〜 |
リストボックス | LB_〜 |
コンボボックス | CB_〜 |
また、ちょくとさんのサイトには「ウィンドウメッセージリスト」のページがあり、HSP向けにウィンドウメッセージの一部の解説が載ってます。Win32コントロールのプログレスバー、リストビュー、ツリービュー、アップダウンコントロール、ステータスバー、トラックバー、ツールチップなどにもあります。基本的にメッセージIDの名前をキーワードに検索すると、日本語の解説サイトがヒットすることが多いですが、英語の資料しかないものもあります。
[3] 第3パラメータ
wParam値を指定します。「word Parameter」から。このパラメータに具体的にどのようなものを指定すべきかは、上の第2パラメータのメッセージIDごとに決められてます。
[4] 第4パラメータ
lParam値を指定します。「long Parameter」から。このパラメータに具体的にどのようなものを指定すべきかは、上の第2パラメータのメッセージIDごとに決められてます。
○ 戻り値
sendmsg命令を呼び出した直後のシステム変数statには、SendMessage関数の結果を返す戻り値がそのまま返ります。