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 Komponenten mit onClick ausstatten... (https://www.delphipraxis.net/12721-komponenten-mit-onclick-ausstatten.html)

Tonic1024 3. Dez 2003 08:25


Komponenten mit onClick ausstatten...
 
Moin...

Neue Frage neuer Thread...

Ich habe nun schon einige Tutorials gelesen, aber irgentwie fehlt mir immernoch eines wie man seine Komponente mit ereignissen (Typ TNotifyEvent würde schon reichen) ausstattet. Habs noch nicht hinbekommen. Erbt man die nicht mit?

Hoffe jemand weiß...

Treffnix 3. Dez 2003 09:08

Re: Komponenten mit onClick ausstatten...
 
Dazu legst du eine Private Variable vom Typ TNotifyEvent ( oder einem anderen ) an und ein published Property vom selben Typ.
Und dann musst du dieses Event nur noch an den Stellen im Code, an denen es auftreten soll, abfeuern. Vorher noch prüfen, ob dem Event eine Prozedur zugewiesen wurde.

Delphi-Quellcode:
  ...
  anyqry.Open; //Irgendwas machen
  If Assigned( FOnQueryOpen ) Then //Wenn dem Event etwas zugewiesen ist
    FOnQueryOpen( Self );          //dann starte die externe Prozedur
  ...

Tonic1024 3. Dez 2003 09:43

Re: Komponenten mit onClick ausstatten...
 
Hm... Okay, aber wo kommt dann der dein Codeschnipsel rein?

Ich hab so gemacht, wie du gesagt hast...

Wenn ich jetzt aber...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var btn: TBtn;
begin
  btn:=TBtn.create(Form1);
  btn.onClick:=Dings;
end;
...zuweise, dann muss ich 'Dings' aber doch auch aus der Klasse TBtn (meine Klasse) aufgerufen werden. Dings müsste dann ja auch eine prozedur vom Formular sein... Oder?!?

Treffnix 3. Dez 2003 09:48

Re: Komponenten mit onClick ausstatten...
 
Das kommt an die Stelle in der Komponente, an der das Event auftritt. Im Bsp. halt das öffnen eines Querys.
Kann aber quasi an jede Stelle, die du für sinnvoll hälst.

Tonic1024 3. Dez 2003 09:58

Re: Komponenten mit onClick ausstatten...
 
Moin...

Ich war nicht schnell genug mit dem editieren...:)

Aber mein Problem ist halt, dass ich es irgentwie nicht gebacken kriege aus der Klasse TBtn heraus bei onClick den Code aus Form1 auszuführen...

Treffnix 3. Dez 2003 10:24

Re: Komponenten mit onClick ausstatten...
 
Ja, das müsste funktionieren, sofern Dings eine Prozedur mit den gleichen Parametern wie TNotifyEvent ist.
Also
Delphi-Quellcode:
Procedure Dings( Sender: TObject )
Des weiteren muss das Event onClick in deiner Komponente natürlich auch irgendwann einmal ausgelöst werden. Dazu musst du halt zunächst einmal innerhalb der Komponente feststellen, wann geklickt wurde ( für OnClick). Wie du das machst hängt von deiner Komponente ab. Du könntest z.B. dem OnClick - Event eines Objektes auf deiner Komponente dein eigenes OnClick zuweisen.

Delphi-Quellcode:

type
 TBtn = class( TComponent )
 private
   FOnClick: TNotifyEvent;
   Procedure DoOnClick( Sender: TObject );
   [..]
 public
   [..]
 published
   Property OnClick: TNotifyEvent Read FOnClick Write FOnClick;
   //Die externe Prozedur ( Dings ) ist diesem Property und damit FOnClick zugewiesen
   [..]
End;

[..]

Procedure TBtn.DoOnClick( Sender: TObject ); // Diese Prozedur führst du aus, wann immer dein Programm einen Klick feststellt
Begin                                       // oder\und du weist sie dem OnClick-Event andere Objekte in deier Komponente zu
  If Assigned( FOnClick ) Then // in deinem Fall True, da die externe Prozedur "Dings" zugewiesen ist
    FOnClick( Self );          // führt die externe Prozedur "Dings" mit sich selbst als Sender aus
End;

Tonic1024 3. Dez 2003 13:36

Re: Komponenten mit onClick ausstatten...
 
Spitze...


Mir ist zwar nicht gleich ein licht aufgegangen, und es hat auch nicht sofort funktioniert, aber nu gehts. Und das Beste... Ich weiß sogar warum :lol:

Danke...

Bis denne...

Treffnix 3. Dez 2003 13:50

Re: Komponenten mit onClick ausstatten...
 
Freut mich! :thuimb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 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