コンボボックスの項目表示数を指定 <TOP>
コンボボックスのリスト項目表示数を指定します。
SendMessage
ウィンドウにメッセージを送信
MoveWindow
指定されたウィンドウの位置およびサイズを変更
GetWindowRect ウィンドウの座標をスクリーン座標系で取得
ScreenToClient
マウスカーソルの現在の位置に相当するスクリーン座標を取得し、クライアント座標に変換
CB_SHOWDROPDOWN(&H14F) コンボボックスのリスト部、表示・非表示切替
CB_GETITEMHEIGHT(&H154) コンボボックス内の項目の高さを取得
'================================================================ '= コンボボックスの項目表示数を指定 '= MoveWindow3.bas '================================================================ #include "Windows.bi" #define CB_GETITEMHEIGHT &H154 'コンボボックス内の項目の高さを取得する #define CB_SHOWDROPDOWN &H14F 'コンボボックスのリストボックスの表示または非表示を切り替える Type POINTAPI x As Long y As Long End Type Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' ウィンドウにメッセージを送信 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&) ' ウィンドウの座標をスクリーン座標系で取得 Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT) ' マウスカーソルの現在の位置に相当するスクリーン座標を取得し、クライアント座標に変換 Declare Function Api_ScreenToClient& Lib "user32" Alias "ScreenToClient" (ByVal hWnd&, lpPoint As POINTAPI) Var Shared Combo1 As Object Var Shared Text1 As Object Var Shared Edit1 As Object Var Shared Button1 As Object Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() For i = 1 To 20 Combo1.AddString "Item-" & Trim$(Str$(i)) Next End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var pt As POINTAPI Var rc As RECT Var cWidth As Long Var newHeight As Long Var oldMapMode As Long Var numItemsToDisplay As Long Var itemHeight As Long numItemsToDisplay = Val(Edit1.GetWindowText) If numItemsToDisplay > 20 Then Edit1.SetWindowText "" : Exit Sub Text1.SetWindowText "Items displayed = " & Trim$(Str$(numItemsToDisplay)) oldMapMode = GetMapMode SetMapMode 1 cWidth = Combo1.GetWidth itemHeight = Api_SendMessage(Combo1.GethWnd, CB_GETITEMHEIGHT, 0, ByVal 0) newHeight = itemHeight * (numItemsToDisplay + 2) Ret = Api_GetWindowRect(Combo1.GethWnd, rc) pt.x = rc.Left pt.y = rc.Top Ret = Api_ScreenToClient(GethWnd, pt) Ret = Api_MoveWindow(Combo1.GethWnd, pt.x, pt.y, Combo1.GetWidth, newHeight, True) Ret = Api_SendMessage(Combo1.GethWnd, CB_SHOWDROPDOWN, True, ByVal 0) SetMapMode oldMapMode End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End