【问题标题】:How to track scrolling of TScrollBox in Delphi如何在 Delphi 中跟踪 TScrollBox 的滚动
【发布时间】:2013-07-21 05:23:33
【问题描述】:

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

【问题讨论】:

    标签: delphi tscrollbox


    【解决方案1】:

    这可以通过为消息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.
    

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2022-09-27
      相关资源
      最近更新 更多