Переглянути джерело

* Some fixes, show 2 events in demo

Michaël Van Canneyt 2 роки тому
батько
коміт
8c7cb4c77c

+ 8 - 0
demo/DivAndSpan/mainunit.pas

@@ -15,6 +15,7 @@ type
   TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
   private
+    procedure DoAdditionalClickEvent(Event: TAbstractEvent);
     procedure DoClick(Event: TAbstractEvent);
 
   public
@@ -84,6 +85,7 @@ begin
     Parent:=Body1;
     Style:='background-color: green; ';
     OnClick:=@DoClick;
+    AddEventListener('click',@DoAdditionalClickEvent);
   end;
 
   Div2:=TDiv.Create(Self);
@@ -92,9 +94,15 @@ begin
     Parent:=Body1;
     Style:='border-color: black; height:50px; position: absolute; left: 30px; top: 100px; width: 50px; height: 60px;';
     OnClick:=@DoClick;
+
   end;
 end;
 
+procedure TForm1.DoAdditionalClickEvent(Event: TAbstractEvent);
+begin
+  ShowMessage('We repeat: You clicked '+(Event.sender as TComponent).Name);
+end;
+
 procedure TForm1.DoClick(Event: TAbstractEvent);
 begin
   ShowMessage('You clicked '+(Event.sender as TComponent).Name);

+ 14 - 0
src/fresnel.dom.pas

@@ -461,6 +461,9 @@ type
     procedure UpdateRenderedAttributes; virtual;
     function GetRenderedCSSLength(Attr: TFresnelCSSAttribute; UseInherited: boolean; UseNaNOnFail: boolean = false): TFresnelLength; virtual; // on fail returns NaN
     function GetRenderedCSString(Attr: TFresnelCSSAttribute; UseInherited: boolean): string; virtual;
+    // Events
+    Procedure AddEventListener(aID : TEventID; aHandler : TFresnelEventHandler);
+    Procedure AddEventListener(Const aName: TEventName; aHandler : TFresnelEventHandler);
     property Rendered: boolean read FRendered write FRendered;
     property RenderedBorderBox: TFresnelRect read FRenderedBorderBox write FRenderedBorderBox; // relative to layout parent
     property CSSRenderedAttribute[Attr: TFresnelCSSAttribute]: string read GetCSSRenderedAttribute write SetCSSRenderedAttribute;
@@ -468,6 +471,7 @@ type
     property Font: IFresnelFont read GetFont write FFont;
     // Events
     Property EventDispatcher : TFresnelEventDispatcher Read FEventDispatcher;
+
     Property OnClick : TFresnelEventHandler Index evtClick Read GetEventHandler Write SetEventHandler;
   published
     property CSSClasses: TStrings read FCSSClasses write SetCSSClasses;
@@ -2654,6 +2658,16 @@ begin
   Result:=GetCSSInitialAttribute(ElementAttrToAttrId(Attr));
 end;
 
+procedure TFresnelElement.AddEventListener(aID: TEventID; aHandler: TFresnelEventHandler);
+begin
+  EventDispatcher.RegisterHandler(aHandler,aID);
+end;
+
+procedure TFresnelElement.AddEventListener(const aName: TEventName; aHandler: TFresnelEventHandler);
+begin
+  EventDispatcher.RegisterHandler(aHandler,aName);
+end;
+
 function TFresnelElement.ElementAttrToAttrId(Attr: TFresnelCSSAttribute
   ): TCSSNumericalID;
 begin

+ 2 - 2
src/fresnel.events.pas

@@ -271,8 +271,8 @@ Const
     'KeyPress',
     'Enter',
     'Leave',
-    'MouseClick',
-    'MouseDblClick',
+    'Click',
+    'DblClick',
     'Change',
     'Drag',
     'DragEnd',

+ 3 - 3
src/fresnel.lclevents.pp

@@ -7,15 +7,15 @@ interface
 uses
   Classes, SysUtils, fresnel.events, controls;
 
-Function InitMouseEvent(aForm : TControl; Out aInit : TFresnelMouseEventInit) : Boolean;
+Function InitMouseEvent(aCtrl : TControl; Out aInit : TFresnelMouseEventInit) : Boolean;
 
 implementation
 
-Function InitMouseEvent(aForm : TControl; Out aInit : TFresnelMouseEventInit) : Boolean;
+Function InitMouseEvent(aCtrl : TControl; Out aInit : TFresnelMouseEventInit) : Boolean;
 
 begin
   aInit.ScreenPos:=Mouse.CursorPos;
-  aInit.PagePos:=aForm.ScreenToClient(Mouse.CursorPos);
+  aInit.PagePos:=aCtrl.ScreenToClient(aInit.ScreenPos);
   Result:=True;
 end;