![]() |
Eigene Klasse : Ereignisse ?
Hallo, leider finde ich bezgl der erstellung von Ereignissen in der eigenen Klasse nichts :(
Hat jemand ein kleines Beispiel ? Oder ein spez. Stichwort nachdem ich suchen kann? Danke :) Gruß, Real-TTX |
Re: Eigene Klasse : Ereignisse ?
|
Re: Eigene Klasse : Ereignisse ?
|
Re: Eigene Klasse : Ereignisse ?
Moin,
Ereignisse bei OO gehen in Delphi so
Delphi-Quellcode:
Wichtig ist das "of object" - Das "Standardereignis", das häufig verwendet wird ist
type
TDeinEreignis = procedure(Parameter1: Integer; Parameter2: string) of object; ![]() In der Klasse siehts dann so aus
Delphi-Quellcode:
Viele Grüße
type
TDeineKlasse = class private FEreignis: TDeinEreignis; public property DeinEreignis: TDeinEreignis read FEreignis write FEreignis; end; // Wenn Du es dann aufrufen willst z.B. if @FEreignis <> nil then FEreignis(40, 'Test'); |
Re: Eigene Klasse : Ereignisse ?
Erstmal Danke für die blitzschnellen Antworten.
Also, das mit dem Ereigniss habe ich nun noch nicht ganz so verstanden. Was genau macht :
Delphi-Quellcode:
// Wenn Du es dann aufrufen willst z.B.
if @FEreignis <> nil then FEreignis(40, 'Test'); Und :
Delphi-Quellcode:
Gruß, Real-TTX
type
TDeineKlasse = class private FEreignis: TDeinEreignis; public property DeinEreignis: TDeinEreignis read FEreignis write FEreignis; // Warum eine Eigenschaft ? Wenn ich außerhalb der Klasse ein Ereigniss Definiere ? end; |
Re: Eigene Klasse : Ereignisse ?
Mit
Delphi-Quellcode:
wird überprüft ob FEreignis vorhanden ist -> also definiert worden ist?
if @FEreignis <> nil then
FEreignis(40, 'Test'); Seh ich das richtig? :) |
Re: Eigene Klasse : Ereignisse ?
Zitat:
Delphi-Quellcode:
und prüft, ob hinter "FEreignis" auch wirklich ein zugewiesenes Ereignis (siehe unten) oder nichts (
if Assigned(FEreignis) then
![]() Die zweite Zeile ist der Aufruf des Ereignis mit den gewünschten Parametern. Zitat:
Delphi-Quellcode:
In der Klasse ist "FEreignis" nun ein Zeiger auf Form1.MeinEreignis. Wenn ich also später "FEreignis(40, 'Test')" schreibe, wird Form1.MeinEreignis mit diesen Parametern aufgerufen.
procedure TForm1.MeinEreignis(Parameter1: Integer; Parameter2: string);
begin // Reagiere auf das Ereignis hier... end; // Dann musst Du noch das Ereignis zuweisen var Klasse: TDeineKlasse; begin // ... Klasse.DeinEreignis := Form1.MeinEreignis; end; Viele Grüße |
Re: Eigene Klasse : Ereignisse ?
Ahh Ok :)
War ich ja garnicht so falsch. Aber warum muss ich in meiner Klasse das aufgerufene Ereigniss zuweisen :
Delphi-Quellcode:
Ich weiß vorher ja nicht ob mich Frm1, Form2 oder Bla aufruft?
Klasse.DeinEreignis := Form1.MeinEreignis;
Ist es möglich das als Property oder ähnliches festzulegen, dass ich beim Aufruf dann folgendes habe :
Delphi-Quellcode:
Gruß, Real-TTX
var
MeinKlasse : TMeineKlasse; procedure Form1.ButtonClick.... begin MeineKlasse.Ereigniss := 'testereignis'; end; procedure Form1.Testereigniss(blabla,blkbalbal); begin ... end; |
Re: Eigene Klasse : Ereignisse ?
Äh, moment!
Möchtest Du in Deiner Klasse ein Ereignis aufrufen oder möchtest Du einem Ereignis des Formulars oder so (ButtonKlick meinetwegen) eine Methode Deiner Klasse zuweisen? |
Re: Eigene Klasse : Ereignisse ?
In meiner Klasse ein Ereigniss aufrufen und in meinem Program (Unit von einer Form) das Ereigniss definieren.
Oder habe ich da nun was falsch verstanden ? Gruß, Real-TTX |
Re: Eigene Klasse : Ereignisse ?
Noch mal anders gefragt: Willst du in deiner Klasse ein Ereignis auslösen?
|
Re: Eigene Klasse : Ereignisse ?
Auslösen, ja
Definieren, nein Oder dreh ich mich gerade im Kreis? :O |
Re: Eigene Klasse : Ereignisse ?
Wenn du eins auslösen willst, musst du auch ein definieren. Und den Code hast du schon bekommen weiter oben.
|
Re: Eigene Klasse : Ereignisse ?
Ja, das habe ich ja soweit verstanden. Aber gint es eine Möglichkeit ohne die Zuweisung der Ereignisse? Wenn ich die Inydy Koponenten nutze muss ich doch auch nicht die Ereignisse zuweisen? Oder irre ich mich?
Gruß, Real-TTX |
Re: Eigene Klasse : Ereignisse ?
Zitat:
Wenn du im Formdesigner auf ein Ereignis doppelklickst (oder auch auf das Formular für das OnCreate-Ereignis) dann wird doch in der Klasse eine Methode erstellt und dem Ereignis wird diese Methode zugewiesen. Das geschieht aber "versteckt" in der dfm-Datei. Aber da steht im Grunde auich nur sowas: Form1.OnCreate := TForm1.FormCreate; Wenn mans also genau nimmt: Nein, du musst das Ereignis nicht zuweisen. Zugewiesen muss es aber werden ;) |
Re: Eigene Klasse : Ereignisse ?
Achso.. So einfach geht das eigentlich? Nun versteh ich das auch -> Bin ein Schritt nach rechts und schon war ich unten vom Schlauch :)
Danke euch :) |
Re: Eigene Klasse : Ereignisse ?
Letze Frage habe ich doch noch, Was mach ich an dieser Stelle falsch ? :
Delphi-Quellcode:
Ich glaub nun steh ich auf dem nächsten Schlauch :(
....
type TDownload = record ID : array[3] of string; URL : string; Size : int64; Proto : integer; Host : string; end; TDownloadWork = procedure(Download : TDownload) of object; TDownloadBegin = procedure(Download : TDownload, Work : integer) of object; TDownloadEnd = procedure(Download : TDownload, Count : integer) of object; THTTPDownloader = class private intDownloads : integer; objHTTP : TidHTTP; DownloadWork : TDownloadWork; DownloadBegin : TDownloadBegin; DownloadEnd : TDownloadEnd; public constructor Create; function GetURLFileSize(aURL : string) : int64; property Downloads : integer read intDownloads; end; var Downloader : THTTPDownloader; implementation ... |
Re: Eigene Klasse : Ereignisse ?
Komma statt Semikolon gesetzt?
|
Re: Eigene Klasse : Ereignisse ?
Wie äußert sich das "falsch" denn? Der Komma-/Semikolonfehler wurde ja schon genannt. Weiterhin kannst Du von außerhalb die Ereignisse wohl nicht zuweisen, stimmt' s?
|
Re: Eigene Klasse : Ereignisse ?
Ja, das sollte man schon machen :wall:
Das war hier gerade so eine Aktion : :coder2: Danke euch, dass ich nicht direkt eins auf die Mütze bekommen habe bei den unnötigen Frage :O |
Re: Eigene Klasse : Ereignisse ?
@DeddyH : Sollte wohl in den Public bereich, oder wie versteh ich deine Aussage. Soweit bin ich noch nicht zum testen gekommen ;)
|
Re: Eigene Klasse : Ereignisse ?
@DeddyH :
Ich habe gerade festgestellt : Ja, es stimmt. Und es liegt nicht an Private/Public :/ Kleiner Tipp ;) ? |
Re: Eigene Klasse : Ereignisse ?
Ach... Habs.. Die Propertys helfen an der Stelle schon sehr :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz