タイトル ドロップダウンリストの表示項目数を変更する
対象言語 VB4.0以降
動作確認OS Windows95,98,NT4.0
使用関数 SendMessage
改築日 1999/09/11
Source Download

コンボボックスのドロップダウンリストの表示する行数を変更します。

Accessの場合、プロパティが用意されていますが、
VBの場合、8行に固定されています。
コンボボックスの高さを、必要行数*1行の高さ+コンボ部の高さ+2 で計算して変更します。


1. フォームを作成しコンボボックス(Combo1) を貼り付けてください。


Option Explicit

Private Sub Form_Load()

  Dim i As Integer

  For i = 1 To 15
    Combo1.AddItem Str$(i)
  Next

'項目数を12行に設定
  Call Y_SetComboListRows(Combo1.hwnd, 12)

End Sub



2.モジュールウインドウを作成し、下のソースを入力してください。

Option Explicit

'ウインドウにメッセージを送る
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const CB_GETITEMHEIGHT = &H154 'コンボボックスのリスト項目の1行の高さを取得する

'ウインドウの大きさを取得する
Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

'ウインドウの位置とサイズを変更する
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const SWP_NOMOVE = &H2 '移動しない


Public Sub Y_SetComboListRows(hwnd As Long, Rows As Integer)
'***********************************************************
'機能 : コンボボックスのリストボックスの表示項目数を変更する
'引数 : hwnd = コンボボックスのウインドウハンドル
'    Rows = 表示項目数 (8〜255)
'***********************************************************

  Dim longret As Long
  Dim iHeight As Long
  Dim CBHeight As Long
  Dim rct As RECT

'コンボボックスのサイズ(Pixcel)を取得する
  longret = GetClientRect(hwnd, rct)

'コンボボックスのリスト項目の高さ(Pixcel)を取得する
  iHeight = SendMessage(hwnd, CB_GETITEMHEIGHT, ByVal 0&, ByVal 0&)

'リストボックスを含んだ全体のコンボボックスの高さ(Pixcel)を求める
  CBHeight = iHeight * Rows + rct.Bottom + 2

'コンボボックスの高さを変更する
  longret = SetWindowPos(hwnd, 0&, 0&, 0&, rct.Right, CBHeight, SWP_NOMOVE)

End Sub





Copyright (C)1997-2001 空耳工房 MY2Project All rights reserved.