Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Синхронизация нескольких TScrollBox в Delphi: добавление собственных событий для отслеживания положения ползунков прокрутки

Delphi , Компоненты и Классы , TScrollBox

При работе с компонентом TScrollBox в Delphi может возникнуть потребность отслеживать положение ползунков прокрутки, чтобы синхронизировать несколько скроллбоксов. К сожалению, стандартный компонент TScrollBox не имеет таких событий. В этом случае можно добавить собственные события для отслеживания положения ползунков прокрутки.

Решением данной проблемы является добавление собственных событий для сообщений WM_HSCROLL и WM_VSCROLL. Это можно сделать, создав интерфейсную часть для TScrollBox и добавив в нее процедуры WMHScroll и WMVScroll. В этих процедурах вызываются соответствующие обработчики событий, которые можно определить в основном классе формы.

Ниже приведен пример кода на Object Pascal, демонстрирующий, как это можно сделать:

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.

В данном примере создается интерфейсная часть для TScrollBox, в которой определены процедуры WMHScroll и WMVScroll. В этих процедурах вызываются обработчики событий MyScrollHorz и MyScrollVert, которые синхронизируют положение ползунков прокрутки между двумя скроллбоксами. В методе FormCreate устанавливаются обработчики событий для скроллбокса ScrollBox1.

Таким образом, можно добавить собственные события для отслеживания положения ползунков прокрутки в TScrollBox и синхронизировать несколько скроллбоксов в Delphi.

Создано по материалам из источника по ссылке.

Решение проблемы синхронизации нескольких TScrollBox в Delphi путем добавления собственных событий для отслеживания положения ползунков прокрутки.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TScrollBox ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:28:32/0.0031719207763672/0