|
|
2018/4/30(Mon) 21:45:37|NO.84224
コンボボックスの内容を [ objprm ] で変更すると
*go_1 のように全部が表示されません。
[ objprm ] を使っても *go_2 のように全部が表示されるようにするには
どうすればよろしいでしょうか?
それとも *go_2 のように [ clrobj ] を使うしか方法はないのでしょうか?
a=0 : list=""
repeat 38
list+=strf("%05d",cnt)+"\n"
loop
objsize 270,150,25
pos 5,2 : combox a,850,list
objsize 50,20,25
pos 300,2 : button "GO-1",*go_1 : pos 370,2 : button "GO-2",*go_2
stop
*go_1
list_1="go_1\n"+list
objprm 0,list_1
sendmsg objinfo(0,2),0x014e,0
stop
*go_2
clrobj 0,0
list_2="go_2\n"+list
objsize 270,20,25
pos 5,2 : combox a,400,list_2
sendmsg objinfo(0,2),0x014e,0
stop
|
|
2018/5/1(Tue) 02:56:34|NO.84225
提示いただいたコードだとGO-1もGO-2も同じ挙動なのですが、
「全部が表示される」というのは、コンボボックスが自動で開くということでしょうか?
でしたら、sendmsgで送るウィンドウメッセージは0x014F(CB_SHOWDROPDOWN)かと思います。
以下のサイトを参考に、
https://social.msdn.microsoft.com/Forums/vstudio/en-US/7127c4df-3cdc-408a-94bc-fc705e2b50c5/windows-message-combo-box-drop-up?forum=vbgeneral
http://wisdom.sakura.ne.jp/system/winapi/win32/win71.html
https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb775919%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
http://bu-nyan.m.to/sdk/sdk10.htm
a=0 : list=""
repeat 38
list+=strf("%05d",cnt)+"\n"
loop
objsize 270,150,25
pos 5,2 : combox a,850,list
objsize 50,20,25
pos 300,2 : button "GO-1",*go_1
stop
*go_1
list_1="go_1\n"+list
objprm 0,list_1
sendmsg objinfo(0,2),0x014f,1 //コンボボックスを開く
sendmsg objinfo(0,2),0x014e,0 //コンボボックスの最初の項目が選択されている状態に
stop
|
|
2018/5/1(Tue) 03:30:29|NO.84226
あー、もしかして、コンボボックスを展開した時の高さのことを言ってるのですか?
だとしたら、色々調べてみましたが、私にはわかりません。
あったとしても、やはりclrobjで一旦コンボボックスを消してから作り直し、というのが
一番簡単なのではないでしょうか。
|
|
2018/5/1(Tue) 03:37:34|NO.84227
これでいいのかな?
#include "user32.as"
#define CBS_NOINTEGRALHEIGHT 0x0400
a=0 : list=""
repeat 38
list+=strf("%05d",cnt)+"\n"
loop
objsize 270,150,25
pos 5,2 : combox a,850,list
//コンボボックスのスタイルを変更
GetWindowLong objinfo(0,2),-16 : Style = stat
SetWindowLong objinfo(0,2),-16,Style | CBS_NOINTEGRALHEIGHT
//CBS_NOINTEGRALHEIGHT説明
//システムが項目数によってドロップダウンの表示Yサイズを自動的に変更できないようにする。
objsize 50,20,25
pos 300,2 : button "GO-1",*go_1 : pos 370,2 : button "GO-2",*go_2
stop
*go_1
list_1="go_1\n"+list
objprm 0,list_1
sendmsg objinfo(0,2),0x014e,0
stop
*go_2
clrobj 0,0
list_2="go_2\n"+list
objsize 270,20,25
pos 5,2 : combox a,400,list_2
sendmsg objinfo(0,2),0x014e,0
stop
|
|
2018/5/1(Tue) 03:51:29|NO.84228
そうそう、combox の objprm って 2つの処理の仕方があるからね。
objprm オブジェクトID,文字列 だと内容を変更する。
objprm オブジェクトID,数値 だと選択されている番号を変更する。
数値だと sendmsg objinfo(0,2),0x014e,0 と同じことができるってだけだけどね。
|
|
2018/5/1(Tue) 11:41:47|NO.84229
いい方法があったのに適当なこと言って申し訳ありませんでした。
|
|
2018/5/4(Fri) 11:52:09|NO.84260
>沢渡さん
質問の意図が伝わらず、お時間をお取りさせて申し訳ございません。
もう少しわかりやすく質問できるよう気を付けたいと思います。
ありがとうございました。
>MillkeyStarsさん
正に欲しかったサンプルです。ありがとうございました。
#define の部分や SetWindowLong などは基本から勉強しないと使えないので
私のように命令や関数を意味も知らずにただ使っている者にとって
サンプルを示していただくと、とても助かります。
また、
objprm オブジェクトID,数値 が sendmsg objinfo(0,2),0x014e,0 と同じだと言う事も
初めて知りました。
objprm の使い方を見ても P2 : コンボボックスの内容変更(文字列)
としか書いていないのでP2に数値は入れられないものと思っていました。
sendmsg objinfo(0,2),0x014e,0 は以前こちらの掲示板で教えていただいたのですが
objprm オブジェクトID,数値 の方が簡単でいいですね^^
沢渡さん、MillkeyStarsさん
本当にありがとうございました。
これからも、よろしくお願いいたします。
返信が遅くなった事、申し訳ありませんでした。
|
|