AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Eigene Komponente -> Wie ein eigenes OnEvent erstellen?
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente -> Wie ein eigenes OnEvent erstellen?

Ein Thema von KodeZwerg · begonnen am 28. Jul 2020 · letzter Beitrag vom 1. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#1

Eigene Komponente -> Wie ein eigenes OnEvent erstellen?

  Alt 28. Jul 2020, 07:52
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 28. Jul 2020, 08:04
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 28. Jul 2020, 08:14
Du bist mein


Vielen Dank!!!!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 28. Jul 2020, 21:36
Zusatz: Du kannst auch statt TNotifyEvent eine eigene Procedure verwenden mit

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.
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 29. Jul 2020, 07:36
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#6

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

  Alt 29. Jul 2020, 08:53
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
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 29. Jul 2020, 09:11
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 29. Jul 2020, 09:23
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)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 29. Jul 2020, 09:57
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 29. Jul 2020, 11:37
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 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