123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- unit UnitMain;
- interface
- {$include GR32.inc}
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
- GR32_Image,
- GR32_Layers;
- const
- MSG_INTRO = WM_USER;
- type
- TFormMain = class(TForm)
- PanelLeft: TPanel;
- Label1: TLabel;
- Image: TImage32;
- PanelRight: TPanel;
- Label2: TLabel;
- ImgView: TImgView32;
- LabelImgViewZoom: TLabel;
- LabelImageZoom: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
- procedure ImgViewMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
- procedure ImageChange(Sender: TObject);
- procedure ImgViewChange(Sender: TObject);
- private
- procedure MsgIntro(var Msg: TMessage); message MSG_INTRO;
- public
- end;
- var
- FormMain: TFormMain;
- implementation
- {$R *.dfm}
- uses
- {$if defined(UseInlining)}
- Types,
- {$ifend}
- GR32.Examples,
- GR32,
- GR32_PNG,
- GR32_PortableNetworkGraphic; // Required for inline expansion
- procedure TFormMain.FormCreate(Sender: TObject);
- begin
- ImgView.Background.CheckersStyle := bcsMedium;
- Image.Background.CheckersStyle := bcsMedium;
- ImgView.Bitmap.DrawMode := dmBlend;
- Image.Bitmap.DrawMode := dmBlend;
- ImgView.Bitmap.LoadFromFile(Graphics32Examples.MediaFolder+'\coffee.png');
- Image.Bitmap.LoadFromFile(Graphics32Examples.MediaFolder+'\coffee.png');
- ImgView.MousePan.Enabled := True;
- Image.MousePan.Enabled := True;
- ImgView.MouseZoom.Enabled := True;
- Image.MouseZoom.Enabled := True;
- ImgView.MouseZoom.Animate := True;
- Image.MouseZoom.Animate := True;
- // MouseWheel events aren't sent to the control unless TabStop=True
- ImgView.TabStop := True;
- Image.TabStop := True;
- end;
- procedure TFormMain.FormShow(Sender: TObject);
- begin
- PostMessage(Handle, MSG_INTRO, 0, 0);
- end;
- procedure TFormMain.FormResize(Sender: TObject);
- begin
- PanelLeft.Width := ClientWidth div 2;
- end;
- procedure TFormMain.ImageChange(Sender: TObject);
- begin
- LabelImageZoom.Caption := Format('Zoom: %.4n', [Image.Scale]);
- end;
- procedure TFormMain.ImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
- var
- Pivot: TPoint;
- begin
- if (Button = mbMiddle) then
- begin
- TImage32(Sender).BeginUpdate;
- try
- // Reset Zoom...
- TImage32(Sender).Scale := 1;
- // ...and Center image
- TImage32(Sender).ScrollToCenter;
- finally
- TImage32(Sender).EndUpdate;
- end;
- end else
- if (Button = mbRight) then
- begin
- // Right-click centers pixel under cursor
- Pivot := GR32.Point(X, Y);
- Pivot := TImage32(Sender).ControlToBitmap(Pivot);
- TImage32(Sender).ScrollToCenter(Pivot.X, Pivot.Y);
- end;
- end;
- procedure TFormMain.ImgViewChange(Sender: TObject);
- begin
- LabelImgViewZoom.Caption := Format('Zoom: %.4n', [ImgView.Scale]);
- end;
- procedure TFormMain.ImgViewMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
- begin
- if (Button = mbMiddle) then
- begin
- TImgView32(Sender).BeginUpdate;
- try
- // Reset Zoom...
- TImgView32(Sender).Scale := 1;
- // ...and Center image
- TImgView32(Sender).ScrollToCenter;
- finally
- TImgView32(Sender).EndUpdate;
- end;
- end;
- end;
- procedure TFormMain.MsgIntro(var Msg: TMessage);
- begin
- ShowMessage('Use left mouse button to pan, mouse-wheel to zoom and middle button to center and reset scale.');
- end;
- end.
|