コンボ(リスト)ボックス内の文字列検索 <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