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 Eigene Prozeduren für eine Komponente??? (https://www.delphipraxis.net/122098-eigene-prozeduren-fuer-eine-komponente.html)

romber 9. Okt 2008 12:41


Eigene Prozeduren für eine Komponente???
 
Hallo!

Ich versuche gerade, mir eine kleine Komponente zu erstellen. Die Komponente besitzt unter anderem eine TObjectList und zwei Prozeduren, um die Inhalte dieser TObjectList als XML specihern und laden. Alles funktioniert sehr gut. Nun möchte ich für meine Komponente vier Events erstellen, die dann über ObjectInspektor zuzuweisen sind. Diese Events sollen jeweils Anfang und Ende des Speichern- und Ladenprozesses signalisieren, also

OnBeginSave
OnEndSave
OnBeginLoad
OnEndLoad

Wie mache ich das? Wie erstelle ich diese Events? Ich habe mir mehrere Delphi-Units angesehen, unter anderen die StdCtrls.pas, aber nicht weiter gekommen. Die Komponente TButton hat z.B. die Procezur OnClick. Diese wird in der TButton-Deklaration einfach als "property OnClick" deklariert. Das wir aber nicht reichen, oder?

DeddyH 9. Okt 2008 12:47

Re: Eigene Prozeduren für eine Komponente???
 
Delphi-Quellcode:
type TBeginSave = procedure<(Parameter: Datentyp)> of object;

TMyKompo = class
private
  FOnBeginSave: TBeginSave;
  ...
published
  property OnBeginSave: TBeginSave read FOnBeginSave write FOnBeginSave;
  ...
end;

...

procedure TMyKompo.TuWas;
begin
  ...
  if Assigned(FOnBeginSave) then
    FOnBeginSave;
end;
So sieht das im Prinzip aus.

Reinhardtinho 9. Okt 2008 13:02

Re: Eigene Prozeduren für eine Komponente???
 
Zitat:

Zitat von DeddyH
Delphi-Quellcode:
published
  property OnBeginSave: TBeginSave read FOnBeginSave write FOnBeginSave;

Das Hundchen hat das Schlüsselwort "property" vergessen :zwinker: .

DeddyH 9. Okt 2008 13:05

Re: Eigene Prozeduren für eine Komponente???
 
:oops: Stimmt, wird sofortens korrigiert.

oki 9. Okt 2008 13:29

Re: Eigene Prozeduren für eine Komponente???
 
Hi DaddyH,

gib ihm doch für den Anfang ein TNotify Event. Dann hat er es etwas leichter.

Delphi-Quellcode:
TMyKompo = class
private
  FOnBeginSave: TNotifyEvent;
  ...
published
  property OnBeginSave: TNotifyEvent read FOnBeginSave write FOnBeginSave;
  ...
end;

...

procedure TMyKompo.TuWas;
begin
  ...
  if Assigned(FOnBeginSave) then
    FOnBeginSave(self);
end;
Gruß oki

DeddyH 9. Okt 2008 13:32

Re: Eigene Prozeduren für eine Komponente???
 
Ich weiß ja nicht, wie die entsprechende Prozedur auszusehen hat. Evtl. erwartet er ja Parameter, daher hab ich das Typisieren eines Events gleich mit beschrieben.

oki 9. Okt 2008 13:36

Re: Eigene Prozeduren für eine Komponente???
 
Sollte ja keine Kritik sein.
Ich hatte den Eindruck, dass er noch nicht so recht mit Events um weis. Zudem sind die benannten doch recht eindeutig und sicher erst mal als einfache NotifyEvents einbindbar.
Ich würd mich nicht wundern, wenn sonnst die Frage kommt: "Was sagt die Deklaration procedure of Object aus?".

Gruß oki

DeddyH 9. Okt 2008 13:41

Re: Eigene Prozeduren für eine Komponente???
 
Warten wir es einfach mal ab :zwinker:

P.S.: Ich hatte das auch nicht als Kritik aufgefasst, wobei gegen Kritik ja generell nichts einzuwenden ist

oki 9. Okt 2008 13:44

Re: Eigene Prozeduren für eine Komponente???
 
Zitat:

Zitat von DeddyH
P.S.: Ich hatte das auch nicht als Kritik aufgefasst, wobei gegen Kritik ja generell nichts einzuwenden ist

Jooop!

romber 9. Okt 2008 20:05

Re: Eigene Prozeduren für eine Komponente???
 
Vielen Dank für die Hilfe!

Für Load und Save habe ich einfache TNotifyEvents erstellt, wie Oki vorgeschlagen hat. Ich habe ausserdem noch einige Events hinzufügt, die Parameter erwarten. Da war das Beispiel von DeddyH sehr hilfreich. Vielen Dank!


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