掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のリストボックスのスクロールをスムーズに連動するには? (ID:4461)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Halbow です。 >あと上ではスクロールバーを使っていますが >ListBoxに表示されるスクロールバーを使って同じことができないでしょうか? ローカルフックで解決できます。新規で以下のコードを試してみてください。 3つの ListBox のどのスクロールバーを動かしても、他の二つが追随します。 矢印キーによるスクロールには対応していません。(できますが) type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; ListBox3: TListBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private 宣言 } public procedure ProcessMessage(hWindow:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM); end; var Form1: TForm1; implementation {$R *.DFM} var Hook: HHOOK; function CallWndRetProc(code:integer;wparam:WPARAM;lparam:LPARAM):LRESULT;stdcall; var pCWPR:PCWPRetStruct; begin if (code < 0) then begin result := CallNextHookEx(Hook,code,wparam,lparam); exit; end; if (Code = HC_ACTION) then begin pCWPR := PCWPRetStruct(lParam); Form1.ProcessMessage(pCWPR^.hwnd,pCWPR^.message,pCWPR^.wParam,pCWPR^.lParam); end; result := CallNextHookEx(Hook,code,wparam,lparam); end; procedure TForm1.ProcessMessage(hWindow:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM); begin if Msg <> WM_VSCROLL then exit; if hWindow = ListBox1.Handle then begin ListBox2.Perform(Msg,wParam,lparam); ListBox3.Perform(Msg,wParam,lparam); end else if hWindow = ListBox2.Handle then begin ListBox1.Perform(Msg,wParam,lparam); ListBox3.Perform(Msg,wParam,lparam); end else if hWindow = ListBox3.Handle then begin ListBox1.Perform(Msg,wParam,lparam); ListBox2.Perform(Msg,wParam,lparam); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Hook := SetWindowsHookEx(WH_CALLWNDPROCRET,CallWndRetProc,0,GetCurrentThreadID); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnHookWindowsHookEx(Hook); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.