comboxの表示と変数の内容が一致しない
匿名希望 2013/7/19(Fri) 00:45:39|NO.55744
sdim buf, 512
repeat 100
buf += str(cnt)+"\n"
loop
combox cb, , buf
(まぁソースは何でも良いのですが)
1.コンボボックスをクリック(プルダウンリストを開く)
2.そのままマウスを動かさずに↑/↓キーでプルダウンリストの項目を選択
3.再びコンボボックスをクリックしてプルダウンリストを閉じる
上記1.〜3.の手順を踏むと、
「コンボボックスの表示は変更されるのに、それが変数には反映されない」
という状態になります。
・1.の後マウスで選択する
・2.の後Enterキーで決定する
・3.の後↑/↓キーで選択する
等の操作ではきちんと変数に反映されます。
何か解決策などありますでしょうか?
環境:
HSP3.32b
Windows 7 Ultimate Service Pack 1 (x64)
inovia 2013/7/19(Fri) 01:44:36|NO.55746
HSPのコンボボックスの変更取得は、CBN_SELENDOKの通知コードで判断しています。
http://dev.onionsoft.net/trac/browser/trunk/hsp3/win32gui/hspwnd_obj.cpp#L202
確実に値の変更を取得するには、CBN_SELCHANGEの通知コードを拾うと良さそうです。
以下のようにすると確実に取得できるようになるかと。
#define WM_COMMAND 0x0111
#define CB_GETCURSEL 0x0147
#define CBN_SELCHANGE 1
oncmd gosub *on_wm_command, WM_COMMAND
sdim buf, 512
repeat 100
buf += str(cnt)+"\n"
loop
combox cb, , buf
hCombox = objinfo(stat, 2)
stop
*on_wm_command
// 作ったコンボボックスの場合
if lparam == hCombox{
// コンボボックスのインデックスの値が変更された場合
if (wparam>>16) == CBN_SELCHANGE{
// コンボボックスのインデックスの値を取得する
sendmsg hCombox, CB_GETCURSEL, 0, 0
// stat に コンボボックスのインデックス値が入るので代入
cb = stat
}
}
return
匿名希望 2013/7/19(Fri) 10:06:08|NO.55747
今組んでるスクリプトでは
CBN_SELCHANGEメッセージを拾うのが難しかったのですが(動作は確認できました)
CB_GETCURSELメッセージで選択項目を取得できました
inoviaさんどうもありがとうございました