HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1018
wlobjprmによるlistboxの内容変更時の「状態を保持する変数」の更新遅れ?2解決


wl

リンク

2020/10/18(Sun) 19:19:45|NO.91648

リストボックスの選択項目の変更(項目のクリック等)のウインドウメッセージを検知して、
選択された項目のインデックスを取得したかったのですが、
objprmによる内容変更後、初めてリストボックスを選択すると、
インデックスが「-1」となってしまいます。

下のスクリプトを実行してログを確認すると再現すると思います。


oncmd gosub *command,$111 list="a" listbox a,,list id=stat button gosub "new",*new stop *new //新しい項目を作成 list+="\n"+c:c++ objprm id,list //objpramで内容を変更 return *check //インデックスを調べる logmes a return *command if ( (wparam>>16&$FFFF) == 1) { //リストボックスが選択された gosub *check } return

やり方がおかしいのでしょうか。
この場合にしっかりと変更を確認する方法は何かありますか。



この記事に返信する


沢渡

リンク

2020/10/18(Sun) 19:54:01|NO.91649

どうも、listboxに割り当てられた変数に実情が反映されるタイミングは
WM_COMMANDの割り込み処理が終わった後のようで、
それで「クリックする前のカーソル位置」がlogmesで出力されてしまっているようです。
sendmsgでLB_GETCURSELを送ってみたらどうなるでしょう。

oncmd gosub *command,$111 //WM_COMMAND list="a" listbox a,,list id=stat h=objinfo(id,2) //オブジェクトのハンドル button gosub "new",*new stop *new //新しい項目を作成 list+="\n"+c:c++ objprm id,list //objpramで内容を変更 return *check //インデックスを調べる sendmsg h,0x188,0,0 //LB_GETCURSEL logmes stat return *command if (lparam == h)&( (wparam>>16&$FFFF) == 1) { //リストボックスが選択された gosub *check } return



wl

リンク

2020/10/18(Sun) 21:54:46|NO.91650

お早い回答ありがとうございます。返信が遅くなってしまいすみません。
そういうことだったんですね!本当に、知らないことだらけです。
提案していただいた方法でインデックスが取得できました!
助かりました。ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.