HSP3がサポートしてるoncmd命令を使うと、ユーザーによるオブジェクトの細かい挙動イベントを取得できます。 HSP標準対応のリストボックス(listbox命令)combox(コンボボックス命令)を例に~。たとえば、


  • 項目の選択
    (通常クリック、リストボックスの場合はダブルクリックも)
  • フォーカスの移動
  • コンボボックスのリストのドロップダウン

 みたいなことが行われると、WM_COMMANDメッセージというのが通知されます。oncmd命令はこのメッセージが通知されたときのラベルジャンプ先をあらかじめ指定しておきます。
 ジャンプ先では、システム変数lparamにイベントが行ったオブジェクトのウィンドウハンドル、wparamの上位ワードに通知コードが返ります。(飛び先ではサブルーチン処理として必ずreturnさせる)

 通知コードは、Delphi言語向けのサイトですがHalbowさんとこを参照。リストボックス「LBN_~」が5コほど、コンボボックス「CBN_~」が10コほどあります。(実際にはその内の一部の通知コードが返ってくる)


// 通知コードを表示するテストスクリプト (by 無題な濃いログ)
// (どんどんイベントを起こすとウィンドウサイズが足りんのでlogmes命令あたりを)

#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)

#define WM_COMMAND $111
 
 oncmd gosub *command, WM_COMMAND

 objsize 100

 listbox value, 50, "HSP\nlistbox\nWM_COMMAND"
 hListbox = objinfo(stat, 2)

 combox value, 100, "HSP\ncombox\nWM_COMMAND"
 hCombox = objinfo(stat, 2)

 pos 150, 0

 stop

*command
 if lparam = hListbox {
  mes "L " + ""+HIWORD(wparam)

  return
 }
 
 if lparam = hCombox {
  mes "C " + ""+HIWORD(wparam)

  return
 }

 return