|
|
2015/9/10(Thu) 20:45:57|NO.71571
listboxを配置し、画面のリサイズに合わせてリサイズするときれいにサイズが
変更されない場合があります。
きれいにリサイズされる方法ありますか?
説明が難しいですので以下のソースを実行してサイズを変更してみてください。
縦幅を変更すると下に隙間?ができます。
よろしくお願いします。
#uselib "user32.dll"
#func MoveWindow "MoveWindow" int,int,int,int,int,int
gsel 0,-1
screen 2,ginfo_dispx,ginfo_dispy,1,0,0,300,300
objsize ginfo_winx: listbox lbx, ginfo_winy, "aaaa\nbbb\nccc": hLbx=objinfo(stat, 2)
oncmd *resize, $05 //リサイズされたら割り込み
stop
*resize
MoveWindow hLbx,0,0,ginfo_winx,ginfo_winy,1
stop
|
|
2015/9/10(Thu) 20:54:07|NO.71572
リストボックスって横1列の高さ分ずつしかリサイズできないので、
それが原因ですね。
簡単な方法だと、画面から少しはみ出るくらいの大きさで指定するしか無いと思います。
ただ先輩方ならウインドウスタイルの変更とかで出来そう・・・
|
|
2015/9/10(Thu) 21:35:21|NO.71575
こんな感じ?
#uselib "user32.dll"
#func MoveWindow "MoveWindow" int, int, int, int, int, int
gsel 0, -1
screen 2, ginfo_dispx, ginfo_dispy, 1, 0, 0, 300, 300
winobj "listbox", "", $200, $50200001 | $100000 | $100, ginfo_winx, ginfo_winy
hListbox = objinfo_hwnd(stat)
oncmd *resize, $05 //リサイズされたら割り込み
stop
*resize
MoveWindow hListbox, 0, 0, ginfo_winx, ginfo_winy, 1
stop
|
|
2015/9/10(Thu) 21:39:22|NO.71576
|
|
2015/9/10(Thu) 22:00:17|NO.71577
>スペースさん
なるほど、1行分ずつのリサイズ仕様なんですね。
横サイズやmesbox等では起きないことに納得しました。
>葡萄色さん
おお、きれいにリサイズしますね。すばらしい。
参考もありがとうございます。
こんなに早く解決するとは思いませんでした。
助かりました。感謝です。
|
|
2015/9/10(Thu) 22:17:50|NO.71578
すみません。書くのが遅いため書いている間に葡萄色さんがいいサンプルを投稿しましたが、わたしが書いたサンプルも何かの役にたつかもしれないので一応投稿しておきます。
それとNoaからNoapに名前を変えました。
#uselib "user32.dll"
#func MoveWindow "MoveWindow" int,int,int,int,int,int
#uselib "user32.dll"
#cfunc GetWindowLong "GetWindowLongA" sptr,int
#func SetWindowLong "SetWindowLongA" sptr,int,int
#define GWL_STYLE (-16)
//ウィンドウスタイル
#define WS_MAXIMIZEBOX $00010000//最大化ボタンを持つウィンドウを作成
#define LBS_NOINTEGRALHEIGHT $00000100//サイズを決められるようにする
#define LBS_NOTIFY $00000001//oncmd用
#define WS_CHILDWINDOW $40000000
#define WS_VISIBLE $10000000
#define WS_VSCROLL $00200000//縦スクロールバー
#define WS_HSCROLL $00100000//横スクロールバー 横にスクロールさせたいときに
//拡張ウィンドウスタイル
#define WS_EX_CLIENTEDGE $00000200//mesboxと同じ縁
#define LB_GETCURSEL $00000188
#define LB_ADDSTRING $00000180
#define WM_SETREDRAW $0000000B
#define LB_ERR -1
#define WM_SIZE $00000005
gsel 0,-1
screen 2,ginfo_dispx,ginfo_dispy,screen_hide+screen_palette,0,0,300,300
//objsize ginfo_winx,ginfo_winy : listbox lbx, ginfo_winy, "aaaa\nbbb\nccc": hLbx=objinfo_hwnd(stat)
//SetWindowLong hLbx, GWL_STYLE , GetWindowLong(hLbx, GWL_STYLE) | LBS_NOINTEGRALHEIGHT
SetWindowLong hwnd, GWL_STYLE , GetWindowLong(hwnd, GWL_STYLE) | WS_MAXIMIZEBOX
pos 0,20
winobj "ListBox" , "" , WS_EX_CLIENTEDGE , LBS_NOINTEGRALHEIGHT | WS_CHILDWINDOW | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL , ginfo_winx , ginfo_winy-20
hLbx=objinfo_hwnd(stat)
sendmsg hLbx,WM_SETREDRAW
ichiran="aaa"
sendmsg hLbx,LB_ADDSTRING,0,varptr(ichiran)
ichiran="bbb"
sendmsg hLbx,LB_ADDSTRING,0,varptr(ichiran)
ichiran="ccc"
sendmsg hLbx,LB_ADDSTRING,0,varptr(ichiran)
sendmsg hLbx,WM_SETREDRAW,1
oncmd gosub *resize,WM_SIZE
gsel 2,1
while
color 255,255,255
boxf 0,0,ginfo_winx,20
color 0,0,0
pos 0,0
sendmsg hLbx,LB_GETCURSEL,0,0
if stat!=LB_ERR{
tmp=stat+1
mes "選択行:"+tmp
}else{
mes "選択されていません"
}
wait 1
wend
*resize
MoveWindow hLbx,0,20,ginfo_winx,ginfo_winy-20,1
return
| |
|
2015/9/10(Thu) 22:19:52|NO.71579
後からSetWindowLongでLBS_NOINTEGRALHEIGHTを追加するのはなぜかうまくできません
|
|
2015/9/11(Fri) 20:50:02|NO.71593
>>Noapさん
SetWindowPos関数で更新してやれば反映できるかなと思ったのですが無理でした。
なんででしょうね…。
|
|
2015/9/12(Sat) 09:43:10|NO.71609
>Noapさん
自分にもわかりませんがサンプルありがとうございます。
|
|