瀏覽代碼

demo: combobox: fixed click

mattias 10 月之前
父節點
當前提交
8b83399115
共有 3 個文件被更改,包括 19 次插入7 次删除
  1. 7 0
      demo/Combobox/MainUnit.pas
  2. 7 3
      demo/Combobox/fresnel.democombobox.pas
  3. 5 4
      src/base/fresnel.classes.pas

+ 7 - 0
demo/Combobox/MainUnit.pas

@@ -18,6 +18,7 @@ type
     Label1: TLabel;
     procedure MainFormCreate(Sender: TObject);
   private
+    procedure OnCombobox1Change(Sender: TObject);
   public
     Combobox1: TDemoCombobox;
   end;
@@ -53,6 +54,12 @@ begin
   Combobox1.Items.Add('First');
   Combobox1.Items.Add('Second');
   Combobox1.Items.Add('Third');
+  Combobox1.OnChange:=@OnCombobox1Change;
+end;
+
+procedure TMainForm.OnCombobox1Change(Sender: TObject);
+begin
+  Application.Log(etInfo,'TMainForm.OnCombobox1Change ItemIndex=%d',[Combobox1.ItemIndex]);
 end;
 
 end.

+ 7 - 3
demo/Combobox/fresnel.democombobox.pas

@@ -189,10 +189,14 @@ procedure TDemoCombobox.DoItemClick(Event: TAbstractEvent);
 var
   Item: TFresnelElement;
 begin
-  writeln('TDemoCombobox.OnItemClick Sender=',DbgSName(Event.Sender));
   Item:=Event.Sender as TFresnelElement;
-  ItemIndex:=Item.Tag;
-  DoChange;
+  while Item.Parent<>Content do
+    Item:=Item.Parent;
+  if ItemIndex<>Item.Tag then
+  begin
+    ItemIndex:=Item.Tag;
+    DoChange;
+  end;
   Menu.SetStyleAttr('display','none');
 end;
 

+ 5 - 4
src/base/fresnel.classes.pas

@@ -165,8 +165,8 @@ type
     Class var
       _LogHook : TFresnelLogHandler;
   Protected
-    Class Procedure DoLog(aType: TeventType; Const Msg : string);
-    Class Procedure DoLog(aType: TeventType; Const Fmt : string; Const Args : Array of const);
+    Class Procedure DoLog(aType: TEventType; Const Msg : string);
+    Class Procedure DoLog(aType: TEventType; Const Fmt : string; Const Args : Array of const);
   Public
     function ToString: RTLString; override;
   end;
@@ -753,13 +753,14 @@ end;
 
 { TFresnelComponent }
 
-class procedure TFresnelComponent.DoLog(aType: TeventType; const Msg: string);
+class procedure TFresnelComponent.DoLog(aType: TEventType; const Msg: string);
 begin
   if Assigned(_LogHook) then
     _LogHook(aType,Msg);
 end;
 
-class procedure TFresnelComponent.DoLog(aType: TeventType; const Fmt: string; const Args: array of const);
+class procedure TFresnelComponent.DoLog(aType: TEventType; const Fmt: string;
+  const Args: array of const);
 begin
   if Assigned(_logHook) then
     _LogHook(aType,SafeFormat(Fmt,Args));