フォームにStringGridを2つ貼り付け、それぞれ10行分の値を設定した状態でスクロール(マウスホイール)したときに2つのStringGridを連動させる動きを作りたいです。
(StringGrid1,StringGrid2それぞれ同じ動きをさせたいです。)
このような連動動作は実現可能でしょうか?
もしわかる方がいましたら宜しくお願いします!
TStringGridにマウスホイールイベントはないのでメッセージで処理
でも何か他に良い方法があるかと。
設計を見直してみては?
参考URL
https://www.petitmonte.com/bbs/answers?question_id=8885
xxx =class(TStringGrid)
private
procedure WMMousewheel(var Msg: TMessage); message WM_MOUSEWHEEL;
procedure xxx.WMMousewheel(var Msg: TMessage);
begin
if (Msg.WParam > 0) then
begin
{ ホイールを奥に動かした時の処理 }
StringGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
StringGrid2.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
end
else
begin
{ ホイールを手前に動かした時の処理 }
StringGrid1.Perform(WM_VSCROLL, SB_LINEUP, 0);
StringGrid2.Perform(WM_VSCROLL, SB_LINEUP, 0);
end;
end;
回答ありがとうございます。
回答の方を参考に以下のようなコードでマウスホイールでの動作は実現できました。
procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
StringGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
StringGrid2.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
Handled := True;
end;
procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
StringGrid1.Perform(WM_VSCROLL, SB_LINEUP, 0);
StringGrid1.Perform(WM_VSCROLL, SB_LINEUP, 0);
Handled := True;
end;
スクロールバーを直接操作の場合でも同じ動きにすることは可能でしょうか?
もし、方法をご存じならご教授お願いします。
上記の投稿の最後の2文は誤りですので、質問は以上で解決いたしました。
ありがとうございました。