コンボボックス内のリストを取り出す          <TOP>


コンボボックス内のリストを取り出します。

SendMessage 指定のウィンドウにメッセージを送る

CB_GETCOUNT(&H146) 項コンボボックスのリストボックスの項目数を取得する
CB_GETLBTEXT(&H148) コンボボックスのリストボックスから文字列を取得する
CB_GETLBTEXTLEN(&H149) コンボボックスのリストボックス文字列の長さを取得する
 

目数を取得 → その長さを取得 → テキストを取得

 

参照

リストボックス内のリストを取り出す

 

'================================================================
'= コンボボックスのリストを取り出す
'=    (SendMessage4.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define CB_GETCOUNT &H146               'コンボボックスのリストボックスの項目数を取得する
#define CB_GETLBTEXT &H148              'コンボボックスのリストボックスから文字列を取得する
#define CB_GETLBTEXTLEN &H149           'コンボボックスのリストボックス文字列の長さを取得する

#define vbCrLf (Chr$(13) & Chr$(10))    'キャリッジリターンとラインフィード(\r\n)

Var Shared Combo1 As Object
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "January"
    Combo1.AddString "February"
    Combo1.AddString "March"
    Combo1.AddString "April"
    Combo1.AddString "May"
    Combo1.AddString "June"
    Combo1.AddString "July"
    Combo1.AddString "August"
    Combo1.AddString "September"
    Combo1.AddString "October"
    Combo1.AddString "November"
    Combo1.AddString "December"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var num As Long
    Var i As Integer
    Var txt As String
    Var Buffer As String
    Var length As Long

    'コンボボックスの項目数を取得
    num = Api_SendMessage(Combo1.GethWnd, CB_GETCOUNT, 0, 0)

    'リストを調べる
    For i = 0 To num - 1

        '項目の長さを取得
        length = Api_SendMessage(Combo1.GethWnd, CB_GETLBTEXTLEN, i, 0)
        
        'バッファの確保
        Buffer = Space$(length + 1)

        'テキストを取得
        length = Api_SendMessage(Combo1.GethWnd, CB_GETLBTEXT, i, Buffer)
        txt = txt & Left$(Buffer, length) & vbCrLf
    Next i
    
    A% = MessageBox("", txt, 0, 2)
End Sub

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