リストボックスを範囲指定して選択する          <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