リストビューコントロールを使用して、画面上でリストの
表示領域を超えるとスクロールバーを表示しています。
その際、マウスで手動で表示するのではなく、スクロール部のデータを
プログラム内で表示するにはどのようにしたらよいのでしょうか?
(フォーカスはリストに移さないで表示したいです。)
どなたかアドバイスお願いします。
リストビューの特定のアイテムのテキストをプログラムから参照したいということでしょうか?
それなら、ListItemsコレクションがアイテムを管理しているので、
ListView1.ListItems.Item(インデックス).Text
で参照できますよ。
Y2さん、言葉が足らず申し訳ありません。
プログラム内からリストデータを参照するというのではなく、
画面表示された際、スクロールバーで移動させないで
リストの下位データを表示させたいのです。
(プログラム内でスクロールバーの制御を行いたい)
そういったことが可能なのでしょうか?
やったこと無いので分からないです。と、書き込もうとしましたけど、今休みなので、思いついたのを試してみたら成功しました。
マウスホイールをエミュレーションするという方法なのですが、マウスホイールのメッセージを送ることでリストビューコントロールをスクロールします。
下に120スクロール
SendMessage ListView1.hwnd, WM_MOUSEWHEEL, &HFF880000, 0
上に120スクロール
SendMessage ListView1.hwnd, WM_MOUSEWHEEL, &H780000, 0
二つ目のパラメータの0の部分はマウス座標を入力するらしいのですが、今回の場合0でいいと思います。
(パラメータはMicrosoft Spy++で調べました)
SendMessageの準備は
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_MOUSEWHEEL As Long = &H20A
をコードの一番上に追加してください。
SendMessage以外にもPostMessageを使ってもできると思うので、だんごさんなりに工夫してみてください。
↑の説明は、ヘルプのMSDNで、フィルタをプラットフォームSDK、もしくはフィルタ無しにした状態で、キーワードに入力すればOKです。(Win32API-User32.dllなので)
ツイート | ![]() |