リストボックス・コンボボックスの行間隔変更 <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