如何在Delphi中跟踪TScrollBox的滚动

如何在Delphi中跟踪TScrollBox的滚动,delphi,tscrollbox,Delphi,Tscrollbox,有没有简单的方法可以通过滚动条跟踪TScrollbox内容的滚动? 我有几个TScrollBox组件(每个组件中都有一些组件),并且希望保持它们的同步。如果其中一个滚动框滚动(垂直或水平),我需要同步滚动其他滚动框。这就是为什么我需要知道滚动条的位置何时改变。 这很奇怪,但是Delphi的TScrollbox组件没有这样的事件 这可以通过为消息WM\u HSCROLL和WM\u HSCROLL添加自己的事件来完成 例如,使用interposer类,这也可以由自己的组件创建。 如果您不需要两个事件

有没有简单的方法可以通过滚动条跟踪TScrollbox内容的滚动? 我有几个TScrollBox组件(每个组件中都有一些组件),并且希望保持它们的同步。如果其中一个滚动框滚动(垂直或水平),我需要同步滚动其他滚动框。这就是为什么我需要知道滚动条的位置何时改变。
这很奇怪,但是Delphi的TScrollbox组件没有这样的事件

这可以通过为消息
WM\u HSCROLL
WM\u HSCROLL
添加自己的事件来完成
例如,使用interposer类,这也可以由自己的组件创建。
如果您不需要两个事件,那么您也只能实现一个,在两个消息过程中都被调用

unit Unit3;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TScrollBox=Class(VCL.Forms.TScrollBox)
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  private
    FOnScrollVert: TNotifyEvent;
    FOnScrollHorz: TNotifyEvent;
  public
   Property OnScrollVert:TNotifyEvent read FOnScrollVert Write FonScrollVert;
   Property OnScrollHorz:TNotifyEvent read FOnScrollHorz Write FonScrollHorz;
  End;

  TForm3 = class(TForm)
    ScrollBox1: TScrollBox;
    Panel1: TPanel;
    Panel2: TPanel;
    ScrollBox2: TScrollBox;
    Panel3: TPanel;
    Panel4: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    procedure MyScrollHorz(Sender: TObject);
    procedure MyScrollVert(Sender: TObject);
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

{ TScollBox }

procedure TScrollBox.WMHScroll(var Message: TWMHScroll);
begin
   inherited;
   if Assigned(FOnScrollHorz) then  FOnScrollHorz(Self);
end;

procedure TScrollBox.WMVScroll(var Message: TWMVScroll);
begin
   inherited;
   if Assigned(FOnScrollVert) then  FOnScrollVert(Self);
end;

procedure TForm3.MyScrollVert(Sender: TObject);
begin
    Scrollbox2.VertScrollBar.Position := Scrollbox1.VertScrollBar.Position
end;

procedure TForm3.MyScrollHorz(Sender: TObject);
begin
    Scrollbox2.HorzScrollBar.Position := Scrollbox1.HorzScrollBar.Position
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  ScrollBox1.OnScrollVert := MyScrollVert;
  ScrollBox1.OnScrollHorz := MyScrollHorz;
end;

end.