リストボックス・コンボボックスの行間隔変更             <TOP>


リストボックス・コンボボックスの項目高さ(行間隔)を12ドット(ピクセル)〜28ドットまで可変します。

SendMessage ウィンドウにメッセージを送信

リストボックスに対して

    LB_GETITEMHEIGHT(&H1A1) 高さを取得

    LB_SETITEMHEIGHT(&H1A0) 高さを設定

コンボボックスに対して

    CB_GETITEMHEIGHT(&H154) 高さを取得

    CB_SETITEMHEIGHT(&H153) 高さを設定

 

例では、項目の高さを取得(初期高さ:12ピクセル)し(大)をクリックする毎に1.1倍の高さを設定、最大行間隔28ピクセルまで変更させています。

また、(小)をクリックする毎に1.1で除算し高さを設定しています。

 

'================================================================
'= リストボックス・コンボボックスの行間隔変更
'=   (ListHeight.bas)
'================================================================
#include"Windows.bi"

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define LB_GETITEMHEIGHT &H1A1          'リストボックス項目の高さを取得する
#define LB_SETITEMHEIGHT &H1A0          'リストボックス項目の高さを設定する

#define CB_GETITEMHEIGHT &H154          'コンボボックス内の項目の高さを取得する
#define CB_SETITEMHEIGHT &H153          'コンボボックス内の項目の高さを設定する
#define CB_SHOWDROPDOWN &H14F           'コンボボックスのリストボックスの表示または非表示を切り替える

Var Shared List1 As Object
Var Shared Combo1 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 12
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 12
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 12
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

Var Shared ItemHeight As Long

'================================================================
'=
'================================================================
Declare Sub NumSet()
Sub NumSet()
    Var Num As String

    List1.SetWindowSize 88,160
    List1.ResetContent
    Combo1.ResetContent

    '文字列用意
    For Count = 1 To 12
    Num = Format$(Rnd(Count) * 100000000, "###,###,###")
        List1.AddString Num
        Combo1.AddString Num
    Next Count

    'リストボックス項目の高さを取得
    ItemHeight = Api_SendMessage(List1.GethWnd, LB_GETITEMHEIGHT, 0, ByVal 0)

    'コンボボックス項目の高さを取得(ListBoxと同じ値なので不要)
'   ItemHeight = Api_SendMessage(Combo1.GethWnd, CB_GETITEMHEIGHT, 0, ByVal 0)

    'マウス砂時計解除
    SetMousePointer 0
    Ret = Api_SendMessage(Combo1.GethWnd, CB_SHOWDROPDOWN, 1, ByVal 0)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    NumSet

    'リストボックス項目の高さを表示
    Text1.SetWindowText "高さ(Pixcel)" & Chr$(13,10) & "改行間隔:" & Str$(ItemHeight)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    NumSet

    '新しいリストボックス(コンボボックス)項目の高さを指定
    ItemHeight = ItemHeight * 1.1

    If ItemHeight > 28 Then ItemHeight = 28

    'ストボックス項目の高さを設定
    Ret = Api_SendMessage(List1.GethWnd, LB_SETITEMHEIGHT, 0, ByVal ItemHeight)
    Ret = Api_SendMessage(Combo1.GethWnd, CB_SETITEMHEIGHT, 0, ByVal ItemHeight)

    'リストボックス項目の高さを表示
    Text1.SetWindowText "高さ(Pixcel)" & Chr$(13,10) & "改行間隔:" & Str$(ItemHeight)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    NumSet

    '新しいリストボックス項目の高さを指定
    ItemHeight = ItemHeight / 1.1

    If ItemHeight < 12 Then ItemHeight = 12

    'リストボックス項目の高さを設定
    Ret = Api_SendMessage(List1.GethWnd, LB_SETITEMHEIGHT, 0, ByVal ItemHeight)
    Ret = Api_SendMessage(Combo1.GethWnd, CB_SETITEMHEIGHT, 0, ByVal ItemHeight)

    'リストボックス項目の高さを表示
    Text1.SetWindowText "高さ(Pixcel)" & Chr$(13,10) & "改行間隔:" & Str$(ItemHeight)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End