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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0107
セントラルwinobjで作成したコンボボックスのスクロールバーの挙動が変2解決


セントラル

リンク

2010/1/7(Thu) 23:16:02|NO.29823

エディットボックスに直接入力できるコンボボックスが必要になったのですが、
combox命令で作られるコンボボックスは手入力ができなかったため、いろいろと調べて次のようにしました。

#include "user32.as" b="aaaa\nbb\nccccc\nddd\nee\n" repeat 3 b+=b loop combox a,60,b //comboxでコンボボックスを作成 hw = objinfo(stat, 2) //ウィンドウハンドル SetWindowLong hw, -16, $50000202 //$50000203 → $50000202
しかし、どういうわけか手入力できなかったので、winobj命令でコンボボックスを作ってみました。
すると手入力はできるようになりました。
しかしリストボックスにスクロールバーが出なかったため、調べたところ、コンボボックスが持つリストボックスのウィンドウスタイルに違いがあるのではないかと思い、
次のように調べて同じにしました。
その結果スクロールバーは出たのですが、題名にあるように挙動が変です。
一応スクロールはできるのですが、スクロールバーのつかむ所が一番上から動きません。
ここで行き詰ってしまいました。

どうすれば同じ挙動を実現できるでしょうか?それとも、何か根本的に間違いをおかしているのでしょうか?

#include "user32.as" b="aaaa\nbb\nccccc\nddd\nee\n" repeat 3 b+=b loop combox a,60,b //comboxでコンボボックスを作成 hw = objinfo(stat, 2) //ウィンドウハンドル dim COMBOBOXINFO,13 //comboxでつくったコンボボックスのCOMBOBOXINFO構造体 COMBOBOXINFO(0)=$34 dim COMBOBOXINFO2,13 //winobjでつくったコンボボックスのCOMBOBOXINFO構造体 COMBOBOXINFO2(0)=$34 GetComboBoxInfo hw, varptr (COMBOBOXINFO) //COMBOBOXINFO構造体を得る listhw = COMBOBOXINFO(12) //comboxでつくったコンボボックスのリストボックスのハンドル GetWindowLong hw,-16 //comboxボックスのウィンドウスタイル mes stat //$50000203 GetWindowLong hw,-20 //拡張スタイル mes stat //0 GetWindowLong listhw,-16 //comboxボックスのリストボックスのウィンドウスタイル mes stat //$44A08041 GetWindowLong listhw,-20 //拡張スタイル mes stat //$80 winobj "combobox", "", 0, $50000202 //winobjでコンボボックスを作成 //CBS_DROPDOWNLIST($3) → CBS_DROPDOWN($2) winhw = objinfo(stat, 2) //ウィンドウハンドル notesel b //comboxボックスと同じ内容をsendmsgで追加 repeat noteinfo(0) noteget c,cnt sendmsg winhw, $143, 0, c loop noteunsel //追加おわり GetWindowLong winhw,-16 //winobjボックスのウィンドウスタイル mes stat //$50000202 GetWindowLong winhw,-20 //拡張ウィンドウスタイル mes stat //0 GetComboBoxInfo winhw, varptr (COMBOBOXINFO2) winlisthw = COMBOBOXINFO2(12) GetWindowLong winlisthw,-16 //winobjボックスのリストボックスのウィンドウスタイル mes stat //$44808041 SetWIndowLong winlisthw,-16, $44A08041 //comboxボックスのリストボックスと同じように変更 GetWindowLong winlisthw,-20 //拡張ウィンドウスタイル mes stat //$80



この記事に返信する


MIZUSHIKI

リンク

2010/1/8(Fri) 17:55:18|NO.29828

コンボボックスのウィンドウスタイルにWS_VSCROLL(0x200000)が付いていれば挙動がおそらく意図通りになると思います。


// コンボボックス作成 winobj "Combobox", "", 0, $50000202/*WS_CHILD|WS_VISIBLE|CBS_HASSTRINGS|CBS_DROPDOWN*/ | $200000/*WS_VSCROLL*/, 150 winhw = objinfo_hwnd(stat) ;ウィンドウハンドル repeat 300,1 sendmsg winhw, $143/*CB_ADDSTRING*/, 0, ""+cnt loop ; // おまけ - オブジェクトのフォント変更 と 初期値入力 ; #include "user32.as" ; #include "gdi32.as" ; // フォント変更 ; GetStockObject 17 ; sendmsg winhw, $30/*WM_SETFONT*/, stat ; // 初期値 ; GetWindow winhw, 5/*GW_CHILD*/ ; winhw_input = stat ;入力ボックスのウィンドウハンドル ; temp="コンボボックス" ; sendmsg winhw_input, $C/*WM_SETTEXT*/, 0, varptr(temp)



セントラル

リンク

2010/1/8(Fri) 18:36:41|NO.29834

ありがとうございます。意図した動作を実現させることができました。
逆にcomboxで作ったのはなぜWS_VSCROLLがないのに正しくスクロールできるのかなど疑問が残りますが、
解決ということにしたいと思います。



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