Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigener Klasse OnClickEvent zuweisen (https://www.delphipraxis.net/91826-eigener-klasse-onclickevent-zuweisen.html)

Andreas L. 10. Mai 2007 14:23


Eigener Klasse OnClickEvent zuweisen
 
Hi,
ich habe jetzt auf meinen Panels welche in der ScrollBox erzeugt werden (siehe http://www.delphipraxis.net/internal...t.php?t=109550 ) Labels erstellt. Diesen möchte ich ein onClick-Event geben. Jedoch muss der Entwickler, welcher die Klasse benutzt dort eigenen Code hinterlegen können. Also dachte ich mir, dass ich ein property erstelle nach diesem Schema:

In der Anwendung welche die Klasse benutzt:
Delphi-Quellcode:
procedure SomeComponentOnClick(Sender: TObject);
begin

 ShowMessage('Du hast mich geklickt!');

end;

//beim initalisieren der Klasse bzw. erstellen der Items
MeineKlasse.LabelOnclick := SomeComponentOnClick;
Nicht jedes Label auf den Panels soll ein eigenes onClick erhalten, sondern alle das selbe.

Doch wie realisiere ich das?

Ich habe in die DelphiHilfe geschaut und mit den Artikel bei "property" folgendes gebaut, will aber nicht klappen:

Delphi-Quellcode:
property LabelonClick: TNotifyEvent read TNotifyEvent write TNotifyEvent;
Doch ich glaube das ist der falsche Ansatz. Wie soll ich das ganze umsetzen?

Apollonius 10. Mai 2007 14:43

Re: Eigener Klasse OnClickEvent zuweisen
 
Du musst eine private Variable vom Typ TNotifyEvent erstellen (z.B. FOnLabelClick). Außerdem eine Prozedur (protected) namens SetLabelClick mit einem Parameter vom Typ TNotifyEvent. LabelOnClick deklarierst du dann so:
Delphi-Quellcode:
property OnLabelClick:TNotifyEvent read FOnLabelClick write SetLabelClick;
In SetLabelClick musst du nur noch das OnClick aller Labels sowie FOnLabelClick durch den Parameter ersetzen.
Hoffe geholfen zu haben
Apollonius

Andreas L. 10. Mai 2007 14:56

Re: Eigener Klasse OnClickEvent zuweisen
 
Danke für deine Antwort. Hab das versucht so umzusetzen:

Delphi-Quellcode:
...
type
   TElementList = class(TScrollBox)
     constructor Create(AOwner: TComponent); override;
     function Add(ElemType: TElementType; Content: String):Integer;
     procedure Refresh;
     procedure Move(OldPosition, NewPosition: Integer);
     function Count:Integer;
     property OnEditClick:TNotifyEvent read FOnEditClick write SetEditClick;
   protected
     procedure SetEditClick(Click: TNotifyEvent);
   private
     var
      FOnEditClick: TNotifyEvent;
  end;
...
...
...
procedure TElementList.SetEditClick(Click: TNotifyEvent);
begin

 FOnEditClick := Click;

end;
Dummerweise wird FOnEditClick sowie SetEditClick vom Compiler nicht erkannt. Ich denke ich habe mal wieder alles falsch gemacht. :freak:

Muss dazu aber sagen, dass ich nicht wirklich alles was du geschrieben hast, verstanden habe. :wiejetzt:

Apollonius 10. Mai 2007 15:00

Re: Eigener Klasse OnClickEvent zuweisen
 
Ist eigentlich schon ganz in Ordnung. Aber erstelle ganz am Ende der neuen Klasse einen published-Block (meinetwegen auch public) mit dem Property, dann erkennt er auch SetEditClick und FOnEditClick.
In SetEditClick musst du auch noch das OnClick der einzelnen Edits (das sind doch Edits?) zuweisen, also
Delphi-Quellcode:
erstesedit.onClick:=Click;
zweitesEdit.onclick:=click;
...
Hoffe geholfen zu haben
Apollonius

Andreas L. 10. Mai 2007 15:38

Re: Eigener Klasse OnClickEvent zuweisen
 
Hat geklappt. Vielen Dank ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz