ドロップダウンリスト項目数を変更
                                                          玄関へお回り下さい。
コンボボックスのドロップダウンリスト項目数を変更する      (149)
     Option Explicit   'SampleNo=149 WindowsXP VB6.0(SP5) 2002.06.16
'指定のウィンドウにメッセージを送る(P750)
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" (ByVal hwnd As Long, _
  ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'項目の高さを取得する(P784)
Private Const CB_GETITEMHEIGHT = &H154
'ウィンドウの位置・サイズを変更する(P96)
Private Declare Function MoveWindow Lib "user32" _
  (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, _
  ByVal nWidth As Long, ByVal nHeight As Long, _
  ByVal bRepaint As Long) As Long


Private Sub Form_Load()
  Dim i As Long
  For i = 1 To 30
    Combo1.AddItem Format$(i, "@@  ") & "VBレスキュー(花ちゃん)"
  Next i
End Sub


Private Sub Combo1_DropDown()
  'ドロップダウンリストの表示項目数を12に設定
  Call sCBDropDownListItem(Combo1, 12)
End Sub


Private Sub sCBDropDownListItem(CBControl As Control, Item As Long)
  Dim CBHeight As Long
  Dim Result  As Long
  Dim DefaultSM As Long
  DefaultSM = Me.ScaleMode  '現在のスケールモードを保存
  Me.ScaleMode = vbPixels   'スケールモードをピクセルに
  With CBControl
    '項目の高さを取得
    CBHeight = SendMessage(.hwnd, CB_GETITEMHEIGHT, 0&, ByVal 0&)
    '12項目表示する場合の高さを求める
    CBHeight = .Height + CBHeight * Item + 2
    'コンボボックスの高さを変更
    Result = MoveWindow(.hwnd, .Left, .Top, .Width, CBHeight, 1&)
  End With
  Me.ScaleMode = DefaultSM  'スケールモードを元に戻す
End Sub
 




2002/06/16