リストボックスの項目を重複させずに追加          <TOP>


前方一致文字列を検索し、重複させずに追加します。

SendMessage ウィンドウにメッセージを送信

LB_FINDSTRING(&H18F) 前方部分検索

LB_ADDSTRING(&H180) リストボックスに文字列を追加

 

 

'================================================================
'= リストボックスの項目を重複させずに追加
'=    (LB_FINDSTRING.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define LB_FINDSTRING &H18F             '前方部分検索
#define LB_ADDSTRING &H180              'リストボックスに文字列を追加する
#define LB_ERR (-1)                     'エラー

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared List1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    For i = 1 To 20
        List1.AddString Trim$(Str$(i * 1000))
    Next
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Start As Long
    Var MyStr As String
    Var Cnt As Long
    Var Ret As Long

    '検索条件を全範囲に設定
    Start = -1

    '検索する文字列を指定
    MyStr = Edit1.GetWindowText
    If MyStr = "" Then Exit Sub

    '指定した文字列を検索
    Ret = Api_SendMessage(List1.GethWnd, LB_FINDSTRING, Start, MyStr)

    '検索できなかったとき
    If Ret = LB_ERR Then
        'リストボックスに項目を追加
        Cnt = Api_SendMessage(List1.GethWnd, LB_ADDSTRING, 0, MyStr)

        '追加した項目を選択
        List1.SetCursel Cnt

        '処理結果を表示
        Text1.SetWindowtext Str$(Cnt + 1) & "番目に追加"

    '検索できたとき
    Else
           '検索した項目を選択
        List1.SetCursel Ret

        '項目のインデックスを表示
        Text1.SetWindowtext "追加できません"
    End If
End Sub

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