コンボボックスの項目表示数の変更 <TOP>
コンボボックスのリスト項目表示数を変更します。
例ではCOMBO1、2ともに最大10項目表示する高さに設定しています。
起動するとCOMBO1は、最大項目(10)表示で開きます。おなじサイズで設定したCOMBO2は、COMBO1で選択した項目数を表示する高さで開きます。
SendMessage
ウィンドウにメッセージを送信
MoveWindow
指定されたウィンドウの位置およびサイズを変更
CB_SHOWDROPDOWN(&H14F) コンボボックスのリスト部、表示・非表示切替
CB_GETITEMHEIGHT(&H154) コンボボックス内の項目の高さを取得
フォーム設定
data5を選択すると
5項目分の高さで開く
data10を選択すると
10項目分の高さで開く
'================================================================ '= コンボボックスの項目表示数の変更 '= (ComboItemChange.bas) '================================================================ #include "Windows.bi" ' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any) ' 指定されたウィンドウの位置およびサイズを変更 Declare Function Api_MoveWindow& Lib "user32" Alias "MoveWindow" (ByVal hWnd&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal bRepaint&) #define CB_SHOWDROPDOWN &H14F 'コンボボックスのリストボックスの表示または非表示を切り替える #define CB_GETITEMHEIGHT &H154 'コンボボックス内の項目の高さを取得する Var Shared Combo1 As Object Var Shared Combo2 As Object Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Combo2.Attach GetDlgItem("Combo2") : Combo2.SetFontSize 14 Var Shared ItemHeight As Long '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var i As Integer Var Ret As Long Combo1.SetWindowText "初期設定時" Combo2.SetWindowText "項目数変更" For i = 1 To 20 Combo1.AddString "data" & Str$(i) Combo2.AddString "data" & Str$(i) Next i 'コンボボックスコントロールの項目の高さを取得 ItemHeight = Api_SendMessage(Combo2.GethWnd, CB_GETITEMHEIGHT, 0, 0) SetMousePointer 0 Ret = Api_SendMessage(Combo1.GethWnd, CB_SHOWDROPDOWN, 1, ByVal 0) End Sub '================================================================ '= '================================================================ Declare Sub Combo1_Change edecl () Sub Combo1_Change() Var CbNewHeight As Long Var Ret As Long 'コンボボックスコントロールの高さを設定 6項目を表示 '("+2"はドロップダウンリスト部の上下の境界線の高さ分) CbNewHeight = Combo2.GetHeight + ItemHeight * (Combo1.GetCursel + 1 ) + 2 'コンボボックスコントロール(ウィンドウ)の位置とサイズを変更 Ret = Api_MoveWindow(Combo2.GethWnd, Combo2.GetLeft, Combo2.GetTop, Combo2.GetWidth, CbNewHeight, 1) SetMousePointer 0 Ret = Api_SendMessage(Combo2.GethWnd, CB_SHOWDROPDOWN, 1, ByVal 0) Combo2.SetFocus End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End