UnitMain.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. unit UnitMain;
  2. interface
  3. {$include GR32.inc}
  4. uses
  5. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  6. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  7. GR32_Image,
  8. GR32_Layers;
  9. const
  10. MSG_INTRO = WM_USER;
  11. type
  12. TFormMain = class(TForm)
  13. PanelLeft: TPanel;
  14. Label1: TLabel;
  15. Image: TImage32;
  16. PanelRight: TPanel;
  17. Label2: TLabel;
  18. ImgView: TImgView32;
  19. LabelImgViewZoom: TLabel;
  20. LabelImageZoom: TLabel;
  21. procedure FormCreate(Sender: TObject);
  22. procedure FormShow(Sender: TObject);
  23. procedure FormResize(Sender: TObject);
  24. procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
  25. Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
  26. procedure ImgViewMouseDown(Sender: TObject; Button: TMouseButton;
  27. Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
  28. procedure ImageChange(Sender: TObject);
  29. procedure ImgViewChange(Sender: TObject);
  30. private
  31. procedure MsgIntro(var Msg: TMessage); message MSG_INTRO;
  32. public
  33. end;
  34. var
  35. FormMain: TFormMain;
  36. implementation
  37. {$R *.dfm}
  38. uses
  39. {$if defined(UseInlining)}
  40. Types,
  41. {$ifend}
  42. GR32.Examples,
  43. GR32,
  44. GR32_PNG,
  45. GR32_PortableNetworkGraphic; // Required for inline expansion
  46. procedure TFormMain.FormCreate(Sender: TObject);
  47. begin
  48. ImgView.Background.CheckersStyle := bcsMedium;
  49. Image.Background.CheckersStyle := bcsMedium;
  50. ImgView.Bitmap.DrawMode := dmBlend;
  51. Image.Bitmap.DrawMode := dmBlend;
  52. ImgView.Bitmap.LoadFromFile(Graphics32Examples.MediaFolder+'\coffee.png');
  53. Image.Bitmap.LoadFromFile(Graphics32Examples.MediaFolder+'\coffee.png');
  54. ImgView.MousePan.Enabled := True;
  55. Image.MousePan.Enabled := True;
  56. ImgView.MouseZoom.Enabled := True;
  57. Image.MouseZoom.Enabled := True;
  58. ImgView.MouseZoom.Animate := True;
  59. Image.MouseZoom.Animate := True;
  60. // MouseWheel events aren't sent to the control unless TabStop=True
  61. ImgView.TabStop := True;
  62. Image.TabStop := True;
  63. end;
  64. procedure TFormMain.FormShow(Sender: TObject);
  65. begin
  66. PostMessage(Handle, MSG_INTRO, 0, 0);
  67. end;
  68. procedure TFormMain.FormResize(Sender: TObject);
  69. begin
  70. PanelLeft.Width := ClientWidth div 2;
  71. end;
  72. procedure TFormMain.ImageChange(Sender: TObject);
  73. begin
  74. LabelImageZoom.Caption := Format('Zoom: %.4n', [Image.Scale]);
  75. end;
  76. procedure TFormMain.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  77. Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
  78. var
  79. Pivot: TPoint;
  80. begin
  81. if (Button = mbMiddle) then
  82. begin
  83. TImage32(Sender).BeginUpdate;
  84. try
  85. // Reset Zoom...
  86. TImage32(Sender).Scale := 1;
  87. // ...and Center image
  88. TImage32(Sender).ScrollToCenter;
  89. finally
  90. TImage32(Sender).EndUpdate;
  91. end;
  92. end else
  93. if (Button = mbRight) then
  94. begin
  95. // Right-click centers pixel under cursor
  96. Pivot := GR32.Point(X, Y);
  97. Pivot := TImage32(Sender).ControlToBitmap(Pivot);
  98. TImage32(Sender).ScrollToCenter(Pivot.X, Pivot.Y);
  99. end;
  100. end;
  101. procedure TFormMain.ImgViewChange(Sender: TObject);
  102. begin
  103. LabelImgViewZoom.Caption := Format('Zoom: %.4n', [ImgView.Scale]);
  104. end;
  105. procedure TFormMain.ImgViewMouseDown(Sender: TObject; Button: TMouseButton;
  106. Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
  107. begin
  108. if (Button = mbMiddle) then
  109. begin
  110. TImgView32(Sender).BeginUpdate;
  111. try
  112. // Reset Zoom...
  113. TImgView32(Sender).Scale := 1;
  114. // ...and Center image
  115. TImgView32(Sender).ScrollToCenter;
  116. finally
  117. TImgView32(Sender).EndUpdate;
  118. end;
  119. end;
  120. end;
  121. procedure TFormMain.MsgIntro(var Msg: TMessage);
  122. begin
  123. ShowMessage('Use left mouse button to pan, mouse-wheel to zoom and middle button to center and reset scale.');
  124. end;
  125. end.