Зуммирование (Zoom) и панорамирование (Pan) являются полезными функциями для мобильных приложений, которые позволяют пользователям ближе рассмотреть детали или перемещаться по контенту. В этом примере мы покажем, как реализовать зуммирование и панорамирование с использованием TVertScrollBox в Delphi.
Для начала, давайте создадим простой проект с формой, содержащей TVertScrollBox:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
VertScrollBox1: TVertScrollBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Создаем несколько кнопок для зума и панорамирования
with TVertScrollBox1 do
begin
Align := alClient;
ScrollBars := ssVertical;
Parent := Self;
for var i := 0 to 5 do
begin
with TButton.Create(VertScrollBox1) do
begin
Name := 'Button' + IntToStr(i);
Top := i * 50;
Left := 0;
Width := ClientWidth;
Height := 40;
Caption := 'Кнопка ' + IntToStr(i);
OnClick := ButtonClick;
end;
end;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
// Логика обработки нажатия кнопки
end;
end.
Теперь, чтобы добавить зуммирование и панорамирование к TVertScrollBox, мы можем использовать компонент TScaleImage из пакета Vcl.ExtCtrls. Этот компонент позволяет масштабировать изображение и перемещать его в пределах своего клиента.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
VertScrollBox1: TVertScrollBox;
ScaleImage1: TScaleImage;
procedure FormCreate(Sender: TObject);
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Создаем несколько кнопок для зума и панорамирования
with TVertScrollBox1 do
begin
Align := alClient;
ScrollBars := ssVertical;
Parent := Self;
ScaleImage1.Align := alClient;
ScaleImage1.Parent := Self;
for var i := 0 to 5 do
begin
with TButton.Create(VertScrollBox1) do
begin
Name := 'Button' + IntToStr(i);
Top := i * 50;
Left := 0;
Width := ClientWidth;
Height := 40;
Caption := 'Кнопка ' + IntToStr(i);
OnClick := ButtonClick;
end;
end;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
// Логика обработки нажатия кнопки
end;
end.
Теперь, чтобы добавить зуммирование и панорамирование, мы можем использовать процедуры ZoomByPercent и PanToPoint соответственно:
procedure TForm1.ButtonClick(Sender: TObject);
begin
case Sender.Name[6] of
'0': // Увеличение масштаба на 20%
ScaleImage1.ZoomByPercent(20, [poCenter]);
'1': // Перемещение вверх на 50 пикселей
ScaleImage1.PanToPoint(PointF.Create(0, -50), [poCenter]);
'2': // Уменьшение масштаба на 20%
ScaleImage1.ZoomByPercent(-20, [poCenter]);
'3': // Перемещение вниз на 50 пикселей
ScaleImage1.PanToPoint(PointF.Create(0, 50), [poCenter]);
'4': // Восстановление исходного масштаба и положения
ScaleImage1.Reset;
end;
end;
В этом примере мы создаем шесть кнопок с нумерацией от 0 до 5. Каждая кнопка вызывает процедуру ButtonClick, которая обрабатывает нажатие соответствующей кнопки. Например, кнопка с номером 0 увеличивает масштаб изображения на 20% вокруг центра, а кнопка с номером 1 перемещает изображение вверх на 50 пикселей.
В качестве альтернативного решения можно использовать компонент TScrollingWinControl из пакета Vcl.ExtCtrls, который также позволяет реализовать зуммирование и панорамирование с помощью свойств Zoom
Этот текст является инструкцией по созданию проекта в Delphi для демонстрации функций зуммирования (Zoom) и панорамирования (Pan) с использованием компонента TVertScrollBox. В примере создается форма с вертикальным полосой прокрутки, содержащей несколько
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.