リストボックスを範囲指定して選択する <TOP>
SendMessage ウィンドウにメッセージを送信
LB_SELITEMRANGEEX(&H183) リストボックス内の連続する項目を選択する
LB_SETTOPINDEX(&H197) リストボックスの項目が必ず表示状態になるようにする
LB_ERR(-1) エラー
'================================================================ '= リストボックスを範囲指定して選択する '= (LB_SELITEMRANGEEX.bas) '================================================================ #include "Windows.bi" ' ウィンドウにメッセージを送信 Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any) #define LB_SELITEMRANGEEX &H183 'リストボックス内の連続する項目を選択する #define LB_SETTOPINDEX &H197 'リストボックスの項目が必ず表示状態になるようにする #define LB_ERR (-1) 'エラー Var Shared Text(1) As Object Var Shared Edit(1) As Object Var Shared List1 As Object Var Shared Button1 As Object For i = 0 To 1 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14 Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14 Next List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 : List1.SetWindowSize 122, 118 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var Count As Long Var AddItem As String SetMousePointer 2 'コントロールを非表示 List1.ShowWindow 0 'リストボックスに項目を追加 For Count = 0 To (40000 - 1) AddItem = "Item " & Str$(Count) List1.AddString AddItem Next Count 'コントロールを表示 List1.ShowWindow -1 SetMousePointer 0 End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var StartIndex As Long Var EndIndex As Long Var Ret As Long '選択範囲を指定 StartIndex = Val(Edit(0).GetWindowText) EndIndex = Val(Edit(1).GetWindowText) 'リストボックスの指定範囲を選択状態に設定 Ret = Api_SendMessage(List1.GethWnd, LB_SELITEMRANGEEX, StartIndex, ByVal EndIndex) '選択できたときは If Ret <> LB_ERR Then '選択開始項目を先頭に表示 Ret = Api_SendMessage(List1.GethWnd, LB_SETTOPINDEX, StartIndex, ByVal 0) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End