コンボ(リスト)ボックス内の文字列検索          <TOP>


コンボボックスのリストボックス内、およびリストボックス内の文字列を検索します。

SendMessage ウィンドウにメッセージを送る関数

CB_FINDSTRINGEXACT(&H158) コンボボックスに対して

LB_FINDSTRINGEXACT(&H1A2) リストボックスに対して

 

初期状態では『帯広』を検索しています。

『帯広』の検索結果と、『東京』の検索結果

 

 

'================================================================
'= コンボ(リスト)ボックス内の文字列検索
'=    (FindString.bas)
'================================================================
#include "Windows.bi"

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

#define CB_FINDSTRINGEXACT &H158    'コンボボックスのリスト内でプリフィックス文字を探す
#define CB_ERR (-1)                 'エラー
#define CB_SHOWDROPDOWN &H14F       'コンボボックスドロップダウンで開く
#define LB_FINDSTRINGEXACT &H1A2    'リストボックスでプリフィックス文字を探す

Var Shared Combo1 As Object
Var Shared List1 As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object
Var Shared Text(2) As Object

Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
For i = 0 To 2
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
Next i
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "函館" : List1.AddString "札幌"
    Combo1.AddString "旭川" : List1.AddString "函館"
    Combo1.AddString "札幌" : List1.AddString "小樽"
    Combo1.AddString "滝川" : List1.AddString "旭川"
    Combo1.AddString "帯広" : List1.AddString "北見"
    Combo1.AddString "稚内" : List1.AddString "稚内"
    Combo1.AddString "根室" : List1.AddString "帯広"
    Combo1.AddString "釧路" : List1.AddString "室蘭"
    Combo1.AddString "網走" : List1.AddString "根室"
    Combo1.AddString "小樽" : List1.AddString "網走"
    Combo1.AddString "北見" : List1.AddString "釧路"
    Combo1.AddString "室蘭" : List1.AddString "東京"

    Edit1.SetWindowText "帯広"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Start As Long
    Var cFinded As Long
    Var lFinded As Long
    Var Prefix As String
    Var cIdx As Integer
    Var lIdx As Integer

    Start = (-1)                                '検索する条件を全範囲に設定
    Prefix = GetDlgItemText("Edit1")            '検索する文字列を指定

    '指定した文字列を検索
    cFinded = Api_SendMessage(Combo1.GethWnd, CB_FINDSTRINGEXACT, Start, Prefix)
    lFinded = Api_SendMessage(List1.GethWnd, LB_FINDSTRINGEXACT, Start, Prefix)

    '検索した項目を選択
    cIdx = cFinded + 1
    lIdx = lFinded + 1

    If cFinded = CB_ERR Then
        Text(1).SetWindowText "見つかりません"
    Else
        Text(1).SetWindowText Str$(cIdx) & "番目"
    End If

    If lFinded = CB_ERR Then
        Text(2).SetWindowText "見つかりません"
    Else
        Text(2).SetWindowText Str$(lIdx) & "番目"
    End If

    SetMousePointer 0
    Ret = Api_SendMessage(Combo1.GethWnd, CB_SHOWDROPDOWN, 1, ByVal 0)
End Sub

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