gpt4 book ai didi

delphi - 如何在Delphi中跟踪TScrollBox的滚动

转载 作者:行者123 更新时间:2023-12-03 14:57:03 37 4
gpt4 key购买 nike

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

最佳答案

这可以通过为消息 WM_HSCROLLWM_HSCROLL 添加自己的事件来完成。
该示例使用插入器类,这也可以通过自己的组件创建来完成。
如果不需要两个事件,也可以只实现一个,在两个消息过程中都被调用。

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.

关于delphi - 如何在Delphi中跟踪TScrollBox的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788197/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com