GuiHelpers.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:9k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit GuiHelpers;
  2. //---------------------------------------------------------------------------
  3. // GuiHelpers.pas                                       Modified: 04-Feb-2007
  4. // Helper object for acquiring input events for Asphyre GUI       Version 1.1
  5. //---------------------------------------------------------------------------
  6. // Important Notice:
  7. //
  8. // If you modify/use this code or one of its parts either in original or
  9. // modified form, you must comply with Mozilla Public License v1.1,
  10. // specifically section 3, "Distribution Obligations". Failure to do so will
  11. // result in the license breach, which will be resolved in the court.
  12. // Remember that violating author's rights is considered a serious crime in
  13. // many countries. Thank you!
  14. //
  15. // !! Please *read* Mozilla Public License 1.1 document located at:
  16. //  http://www.mozilla.org/MPL/
  17. //
  18. // If you require any clarifications about the license, feel free to contact
  19. // us or post your question on our forums at: http://www.afterwarp.net
  20. //---------------------------------------------------------------------------
  21. // The contents of this file are subject to the Mozilla Public License
  22. // Version 1.1 (the "License"); you may not use this file except in
  23. // compliance with the License. You may obtain a copy of the License at
  24. // http://www.mozilla.org/MPL/
  25. //
  26. // Software distributed under the License is distributed on an "AS IS"
  27. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  28. // License for the specific language governing rights and limitations
  29. // under the License.
  30. //
  31. // The Original Code is GuiHelpers.pas.
  32. //
  33. // The Initial Developer of the Original Code is M. Sc. Yuriy Kotsarenko.
  34. // Portions created by M. Sc. Yuriy Kotsarenko are Copyright (C) 2007,
  35. // Afterwarp Interactive. All Rights Reserved.
  36. //---------------------------------------------------------------------------
  37. interface
  38. //---------------------------------------------------------------------------
  39. uses
  40.  Types, Classes, Controls, Forms, ExtCtrls, GuiTypes, GuiObjects,
  41.  GuiControls, GuiWorkspace;
  42. //---------------------------------------------------------------------------
  43. type
  44.  TGuiHelper = class
  45.  private
  46.   PrevMouseDown: TMouseEvent;
  47.   PrevMouseUp  : TMouseEvent;
  48.   PrevMouseMove: TMouseMoveEvent;
  49.   PrevKeyDown  : TKeyEvent;
  50.   PrevKeyUp    : TKeyEvent;
  51.   PrevKeyPress : TKeyPressEvent;
  52.   PrevClick    : TNotifyEvent;
  53.   PrevDblClick : TNotifyEvent;
  54.   FWorkspace : TGuiWorkspace;
  55.   FActive    : Boolean;
  56.   FEventForm : TForm;
  57.   FEventPanel: TPanel;
  58.   procedure AcquireFormEvents();
  59.   procedure AcquirePanelEvents();
  60.   procedure SetEventForm(const Value: TForm);
  61.     procedure SetEventPanel(const Value: TPanel);
  62.   procedure OwnerMouseDown(Sender: TObject; Button: TMouseButton;
  63.    Shift: TShiftState; X, Y: Integer);
  64.   procedure OwnerMouseUp(Sender: TObject; Button: TMouseButton;
  65.    Shift: TShiftState; X, Y: Integer);
  66.   procedure OwnerMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  67.   procedure OwnerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  68.   procedure OwnerKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  69.   procedure OwnerKeyPress(Sender: TObject; var Key: Char);
  70.   procedure OwnerClick(Sender: TObject);
  71.   procedure OwnerDblClick(Sender: TObject);
  72.   function GetCtrl(const Name: string): TGuiControl;
  73.  public
  74.   property EventForm : TForm read FEventForm write SetEventForm;
  75.   property EventPanel: TPanel read FEventPanel write SetEventPanel;
  76.   property Workspace: TGuiWorkspace read FWorkspace;
  77.   property Active   : Boolean read FActive write FActive;
  78.   property Ctrl[const Name: string]: TGuiControl read GetCtrl;
  79.   procedure Update();
  80.   procedure Draw();
  81.   constructor Create();
  82.   destructor Destroy(); override;
  83.  end;
  84. //---------------------------------------------------------------------------
  85. var
  86.  GuiHelper: TGuiHelper = nil;
  87. //---------------------------------------------------------------------------
  88. implementation
  89. //---------------------------------------------------------------------------
  90. constructor TGuiHelper.Create();
  91. begin
  92.  inherited;
  93.  FWorkspace:= TGuiWorkspace.Create(nil);
  94.  FActive  := True;
  95. end;
  96. //---------------------------------------------------------------------------
  97. destructor TGuiHelper.Destroy();
  98. begin
  99.  FWorkspace.Free();
  100.  inherited;
  101. end;
  102. //---------------------------------------------------------------------------
  103. function TGuiHelper.GetCtrl(const Name: string): TGuiControl;
  104. var
  105.  Ctrl: TGuiObject;
  106. begin
  107.  Ctrl:= FWorkspace.Ctrl[Name];
  108.  if (Ctrl <> nil)and(Ctrl is TGuiControl) then
  109.   Result:= TGuiControl(Ctrl) else Result:= nil;
  110. end;
  111. //---------------------------------------------------------------------------
  112. procedure TGuiHelper.OwnerMouseDown(Sender: TObject; Button: TMouseButton;
  113.  Shift: TShiftState; X, Y: Integer);
  114. begin
  115.  if (Assigned(PrevMouseDown)) then PrevMouseDown(Sender, Button, Shift, X, Y);
  116.  if (FActive) then FWorkspace.MouseDown(Button, Shift, X, Y);
  117. end;
  118. //---------------------------------------------------------------------------
  119. procedure TGuiHelper.OwnerMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  120. begin
  121.  if (Assigned(PrevMouseMove)) then PrevMouseMove(Sender, Shift, X, Y);
  122.  if (FActive) then FWorkspace.MouseMove(Shift, X, Y);
  123. end;
  124. //---------------------------------------------------------------------------
  125. procedure TGuiHelper.OwnerMouseUp(Sender: TObject; Button: TMouseButton;
  126.  Shift: TShiftState; X, Y: Integer);
  127. begin
  128.  if (Assigned(PrevMouseUp)) then PrevMouseUp(Sender, Button, Shift, X, Y);
  129.  if (FActive) then FWorkspace.MouseUp(Button, Shift, X, Y);
  130. end;
  131. //---------------------------------------------------------------------------
  132. procedure TGuiHelper.OwnerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  133. begin
  134.  if (Assigned(PrevKeyDown)) then PrevKeyDown(Sender, Key, Shift);
  135.  if (FActive) then FWorkspace.KeyDown(Key, Shift);
  136. end;
  137. //---------------------------------------------------------------------------
  138. procedure TGuiHelper.OwnerKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  139. begin
  140.  if (Assigned(PrevKeyUp)) then PrevKeyUp(Sender, Key, Shift);
  141.  if (FActive) then FWorkspace.KeyUp(Key, Shift);
  142. end;
  143. //---------------------------------------------------------------------------
  144. procedure TGuiHelper.OwnerKeyPress(Sender: TObject; var Key: Char);
  145. begin
  146.  if (Assigned(PrevKeyPress)) then PrevKeyPress(Sender, Key);
  147.  if (FActive) then FWorkspace.KeyPress(Key);
  148. end;
  149. //---------------------------------------------------------------------------
  150. procedure TGuiHelper.OwnerClick(Sender: TObject);
  151. begin
  152.  if (Assigned(PrevClick)) then PrevClick(Sender);
  153.  FWorkspace.Click();
  154. end;
  155. //---------------------------------------------------------------------------
  156. procedure TGuiHelper.OwnerDblClick(Sender: TObject);
  157. begin
  158.  if (Assigned(PrevDblClick)) then PrevDblClick(Sender);
  159.  FWorkspace.DblClick();
  160. end;
  161. //---------------------------------------------------------------------------
  162. procedure TGuiHelper.AcquireFormEvents();
  163. begin
  164.  with FEventForm do
  165.   begin
  166.    PrevMouseDown:= OnMouseDown;
  167.    PrevMouseUp  := OnMouseUp;
  168.    PrevMouseMove:= OnMouseMove;
  169.    PrevKeyDown  := OnKeyDown;
  170.    PrevKeyUp    := OnKeyUp;
  171.    PrevKeyPress := OnKeyPress;
  172.    PrevClick    := OnClick;
  173.    PrevDblClick := OnDblClick;
  174.    OnMouseDown  := OwnerMouseDown;
  175.    OnMouseUp    := OwnerMouseUp;
  176.    OnMouseMove  := OwnerMouseMove;
  177.    OnKeyDown    := OwnerKeyDown;
  178.    OnKeyUp      := OwnerKeyUp;
  179.    OnKeyPress   := OwnerKeyPress;
  180.    OnClick      := OwnerClick;
  181.    OnDblClick   := OwnerDblClick;
  182.   end;
  183. end;
  184. //---------------------------------------------------------------------------
  185. procedure TGuiHelper.AcquirePanelEvents();
  186. begin
  187.  with FEventPanel do
  188.   begin
  189.    PrevMouseDown:= OnMouseDown;
  190.    PrevMouseUp  := OnMouseUp;
  191.    PrevMouseMove:= OnMouseMove;
  192.    PrevClick    := OnClick;
  193.    PrevDblClick := OnDblClick;
  194.    OnMouseDown  := OwnerMouseDown;
  195.    OnMouseUp    := OwnerMouseUp;
  196.    OnMouseMove  := OwnerMouseMove;
  197.    OnClick      := OwnerClick;
  198.    OnDblClick   := OwnerDblClick;
  199.   end;
  200. end;
  201. //---------------------------------------------------------------------------
  202. procedure TGuiHelper.SetEventForm(const Value: TForm);
  203. begin
  204.  FEventForm:= Value;
  205.  if (FEventForm <> nil) then AcquireFormEvents();
  206. end;
  207. //---------------------------------------------------------------------------
  208. procedure TGuiHelper.SetEventPanel(const Value: TPanel);
  209. begin
  210.  FEventPanel:= Value;
  211.  if (FEventPanel <> nil) then AcquirePanelEvents();
  212. end;
  213. //---------------------------------------------------------------------------
  214. procedure TGuiHelper.Draw();
  215. begin
  216.  if (not FActive) then Exit;
  217.  FWorkspace.Draw();
  218. end;
  219. //---------------------------------------------------------------------------
  220. procedure TGuiHelper.Update();
  221. begin
  222.  if (not FActive) then Exit;
  223. // FWorkspace.Update();
  224. end;
  225. //---------------------------------------------------------------------------
  226. initialization
  227.  GuiHelper:= TGuiHelper.Create();
  228. //---------------------------------------------------------------------------
  229. finalization
  230.  GuiHelper.Free();
  231.  GuiHelper:= nil;
  232. //---------------------------------------------------------------------------
  233. end.