コンボボックスの項目表示数の変更             <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