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


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

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

LB_GETCOUNT(&H18B) リストボックスの項目数を取得する
LB_GETTEXT(&H189) リストボックスから文字列を取得する
LB_GETTEXTLEN(&H18A) リストボックス内の文字列の長さを取得する


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

 

参照

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

 

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

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

#define LB_GETCOUNT &H18B               'リストボックスの項目数を取得する
#define LB_GETTEXT &H189                'リストボックスから文字列を取得する
#define LB_GETTEXTLEN &H18A             'リストボックス内の文字列の長さを取得する

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

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

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    List1.AddString "January"
    List1.AddString "February"
    List1.AddString "March"
    List1.AddString "April"
    List1.AddString "May"
    List1.AddString "June"
    List1.AddString "July"
    List1.AddString "August"
    List1.AddString "September"
    List1.AddString "October"
    List1.AddString "November"
    List1.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(List1.GethWnd, LB_GETCOUNT, 0, 0)

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

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

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

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