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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0430
masako99コンボボックスの内容を [ objprm ] で変更6解決


masako99

リンク

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で一旦コンボボックスを消してから作り直し、というのが
一番簡単なのではないでしょうか。



MillkeyStars

リンク

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



MillkeyStars

リンク

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

いい方法があったのに適当なこと言って申し訳ありませんでした。



masako99

リンク

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さん
本当にありがとうございました。
これからも、よろしくお願いいたします。

返信が遅くなった事、申し訳ありませんでした。



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