2006-06-16(Fri)

リストビュー第4回 選択されているレコードを取得する

小休止 7 8 回

第4回 選択されているレコードを取得する

なんか小休止でやっちゃったが、選択されているレコードを調べて、そのアイテムを取得するようにしてみる。
これまでのソースに手を加える。

1)ソースの変更

第3回で追加した「アイテム取得」処理を変更し、現在選択されているレコードの内容を表示するようにしてみる。

/*メニュー:アイテム取得*/
Sub MainWnd_IDM_GetItem_MenuClick()
    Dim lvi As LVITEM           'リストビューアイテムの構造体
    Dim buf[256] As Byte        'アイテム格納用
    Dim buf2 As String
    Dim i As Long
    Dim j As Long
    Dim AllRecord As Long
    'リストビューの全レコード数を取得
    AllRecord = SendMessage( hList, LVM_GETITEMCOUNT, 0, 0 )
    '選択されたレコードを調べる
    lvi.mask = LVIF_TEXT or LVIF_STATE  '状態とアイテムのテキストについて弄るよ
    lvi.stateMask = LVIS_SELECTED       '状態は選択状態のみを対象に操作しますよ
    For j = 0 to AllRecord -1           '全てのレコードについて調べる(レコード番号は先頭が 0 です)
        lvi.iItem = j                   'インデックス(縦)
        lvi.pszText = VarPtr(buf[0])    '格納するバッファのポインタ
        lvi.cchTextMax = 256            '格納するサイズ(Byte)
        'アイテム情報取得
        For i = 0 to 1
            lvi.iSubItem = i            'サブアイテム(横)
            SendMessage( hList, LVM_GETITEM, 0, VarPtr(lvi) As Long )   'アイテム取得
            buf2 = buf2 + MakeStr( buf As *Byte ) + " "
        Next
        '選択されているレコードなら表示する
        if lvi.state = LVIS_SELECTED then
            '表示
            MessageBox( hMainWnd, buf2, "レコード"+Str$(j), MB_OK )
        End If
        buf2 = ""
    Next
End Sub


今回は状態とテキストを同時に取得している。
レコード数が多い場合は状態のみを調査し、該当した時にテキストを取得すると若干スピードアップすると思う。
そもそも大量のレコードを扱う場合は、仮想リストビューを使うと良い事になっている。(ここでは割愛)

追記: LVM_GETNEXTITEM で短く高速に調べられる。
例)
i = SendMessage( hListWnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED or LVNI_FOCUSED )


今回の任務は以上。短かった・・。

コメントの投稿

管理者にだけ表示を許可する

コメント

プロフィール

nakami

Author:nakami
可愛いテンプレートに似合う俺
うそAチームのスミス大佐

NAVI
カテゴリー
最近の記事
リンク
FC2カウンター
ブログ内検索
RSSフィード
sponsored link