有没有简单的方法来跟踪他的滚动条滚动TScrollbox内容?我有几个TScrollBox组件(每个组件都有一些组件),并希望保持它们同步.如果其中一个滚动框滚动(垂直或水平),我需要同步滚动其他滚动框.这就是为什么我需要知道滚动条位置何时被更改.这很奇怪,但是Delphi的TScrollbox组件没有这样的事件.
bum*_*mmi 13
这可以通过增加对消息本身活动来完成WM_HSCROLL和WM_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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8804 次 |
| 最近记录: |