Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Eigene Komponente -> Wie ein eigenes OnEvent erstellen? (https://www.delphipraxis.net/205055-eigene-komponente-wie-ein-eigenes-onevent-erstellen.html)

KodeZwerg 28. Jul 2020 07:52

Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Guten Morgen, ich finde mit meinen Suchanfragen leider keine guten Treffer.

Ich würde gerne ein eigenes OnEvent erschaffen für eine selbsterstellte Komponente.
Kann mir jemand vielleicht mit einem minimal-Beispiel oder Link auf die Sprünge helfen? Das wäre echt nett!

Was ich vorhabe:
In meiner Komponente gibt es eine "Aborted" Eigenschaft (Boolean) die auch zielführend gesetzt wird, nun hätte ich gerne ein "OnAborted" Event um sowie als auch darauf reagieren zu können,
nur fehlt mir Wissen wie man so etwas macht.
Ich habe gestern in vielen Delphi Komponenten krampfhaft versucht herauszufinden wie die Entwickler das vollbringen, leider ohne ans Ziel zu kommen.

Für Hinweise "How-To" bin ich sehr dankbar!

DeddyH 28. Jul 2020 08:04

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Delphi-Quellcode:
type
  TDeineKomponente = class(TComponent)
  private
    FOnAborted: TNotifyEvent;
    ...
  public
    procedure Abort;
    ...
  published
    property OnAborted: TNotifyEvent read FOnAborted write FOnAborted;
    ...
  end;

...

procedure TDeineKomponente.Abort;
begin
  // Abbrechen
  if Assigned(FOnAborted) then
    FOnAborted(self);
end;

KodeZwerg 28. Jul 2020 08:14

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Du bist mein :angel:


Vielen Dank!!!!

scrat1979 28. Jul 2020 21:36

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Zusatz: Du kannst auch statt TNotifyEvent eine eigene Procedure verwenden mit

Delphi-Quellcode:
FOnAborted : procedure(var DoAbort : Boolean) of object
Dann kannst im Eventhandler die Variable setzen und in deinem Code drauf reagieren

Delphi-Quellcode:
Procedure Komponente.Abort
var FAbort : Boolean;
Begin
 FAbort := True

 if Assigned(FOnAborted) then
 FOnAborted(FAbort);

// Hier kannst dann die Rückgabe von FAbort auswerten und reagieren
end;
Ist manchmal ganz praktisch. Habe auch ewig gebraucht um die Events zu kapieren, aber irgendwann hat es „Click“ gemacht.

KodeZwerg 29. Jul 2020 07:36

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Das werde ich beides am Wochenende mal durchtesten, mir fehlte halt absolut ein Anfang, die Delphi Komponenten sind so dermaßen verschachtelt das ich's nicht nachvollziehen konnte.

Vielen lieben Dank für den Zusatz!

Hobbycoder 29. Jul 2020 08:53

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Also ich mach das, gerade in eigenen Componenten, immer so:
Delphi-Quellcode:
Type
  TOnAbort=proceudre(Sender: TObject; Aborted: Boolean) of object;

  TMyComponent=class(TComponent)
  private
    FOnAbort: TObAbort;
    procedure DoAbort(Aborted: Boolean);
  published
    property OnAbort: TOnAbort read FOnAbort write FOnAbort;
  end;

.
.
.
  proceudre DoAbort(Aborted: Boolean);
  begin
    if Assigned(FOnAbort) then
      FOnAbort(self, Aborted);
  end;
.
.
.
  procedure Execute;
  begin
.
.
.
.
    DoAborted(True);
  end;
So habe ich auch mit self den Sender zur weiteren Verarbeitung und den Event im OI

DeddyH 29. Jul 2020 09:11

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Nur mal so: muss ich in einem "Abbrechen"-Ereignis wirklich mitgeben, ob abgebrochen wurde? Mich persönlich würde das verwirren, wenn nicht abgebrochen wird, wird auch das Event nicht gefeuert.

KodeZwerg 29. Jul 2020 09:23

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Zur Klarstellung:

Momentan hat meine Komponente eine read-only property Aborted. Diese wird von meiner Komponente gesetzt/verwaltet.
So das man code-seitig abfragen kann "if komponente.Aborted then".
Genau das wollte ich mit einem Ereignis (OnEvent) verschönern, so dass der Nutzer der Komponente einfach im Objekt-Inspektor einen Doppelklick auf "OnAborted" macht und dort seinen Code reinschreiben kann der sonst bei "if komponente.Aborted then" zu tragen gekommen wäre.
(bis jetzt fand ich noch keine zeit irgendeine Variante auszuprobieren, aber am Wochenende dann)

Ist das ein falscher Ansatz?


Danke fürs Lesen und Input input input!!! Das hilft mir als Neuling von Komponenten ungemein weiter!! (ich schreib meist nur klassen oder methoden)

DeddyH 29. Jul 2020 09:57

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
Ich finde den Ansatz sinnvoll. Man kann somit an jeder weiteren Stelle prüfen, ob Aborted gesetzt ist, sich aber zusätzlich auch benachrichtigen lassen, wenn und sobald abgebrochen wird. Denkbar wäre auch noch ein weiteres Event, das gefeuert wird, wenn (bzw. unmittelbar bevor) abgebrochen wird, das einen Boolean-Var-Parameter hat, mit dem man quasi das letzte Wort hat, ähnlich dem OnClose-Event von TCustomForm mit seinem CanClose-Parameter.

KodeZwerg 29. Jul 2020 11:37

AW: Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
 
DeddyH Danke, mit dem "zuvor" Nachtrag, an so etwas dachte ich nicht mal ansatzweise.
Es ist toll zu einem Thema verschiedenste Ansichten mitzubekommen, davon lerne ich viel!

Ich habe mir erstmal alle Codevorschläge notiert und mal sehen wie ich mit was am besten klarkomme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.
Seite 1 von 2  1 2   

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