Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigenes Event programmieren? (https://www.delphipraxis.net/70116-eigenes-event-programmieren.html)

Hawkeye219 25. Mai 2006 13:31

Re: eigenes Event programmieren?
 
Luckie hat zum Thema Klassen ein Tutorial verfaßt. Lies es dir in Ruhe durch, dann wirst du wahrscheinlich viele Abläufe besser verstehen.

Gruß Hawkeye

alleinherrscher 25. Mai 2006 13:42

Re: eigenes Event programmieren?
 
Hey, danke, jetzt hab ichs hinbekommen ;)

Das einzige, was ich jetzt noch "unschön" finde, ist dass ich überhaupt das LANFS_SYSTEM in LANFS_KERNAL erzeugen muss...somit erzeuge ich ja praktisch in meiner Unit in der ich die Klasse definiert habe schon eine Variable mit dieser Klasse....öhm oder so...

aber das geht wohl nicht anders oder? Schließlich muss ich das

TCPServer1.OnExecute ereignis zuweisen und das kann ich nur an LANFS_SYSTEM.ReceiveStream zuweisen und eben nicht an "TLANFS_KERNAL"...

naja...THX Hawkeye219 du hast mir sehr geholfen soweit

//edit...juhu, dafür nochmal zurück zum eigentlichen Problem:

Jetzt erzeugt dieser Code hier eine Exception:

Delphi-Quellcode:
    if Assigned(fReceivedData) then
        fReceivedData(Self, FStream);
(wieder eine AccessViolation)...ich hab das doch richtig verstanden, diese 2 zeilen lösen das Event aus, richtig?

alleinherrscher 25. Mai 2006 18:07

Re: eigenes Event programmieren?
 
Kann es sein, dass ich durch das neue Event einen neuen Thread ausführe und der erst synchronisiert werden muss?

Hawkeye219 25. Mai 2006 19:21

Re: eigenes Event programmieren?
 
Ok, hier einige Vorschläge:

Ändere deine Unit LANFS_KERNAL folgendermaßen ab:
  • Entferne die Deklaration der Variablen LANFS_SYSTEM
  • Entferne in der Methode TLANFS_KERNAL.Start den Bezeichner LANFS_SYSTEM. Die Zeile sollte dann so aussehen:
    Delphi-Quellcode:
    TCPServer1.OnExecute := ReceiveStream;
    Da die Anweisung innerhalb einer Methode von TLANFS_KERNAL steht, ist die Angabe nicht notwendig. Wenn du mehrere Instanzen von TLANFS_KERNAL erzeugen möchtest, ist sie sogar falsch.
Wenn ich nichts übersehen habe, sollte die Unit nach diesen Änderungen universeller verwendbar sein. Um sie zu nutzen, mußt du eine Instanz von TLANFS_KERNAL erzeugen. Die dazu notwendige Variable (die wir eben in der Unit LANFS_KERNAL entfernt haben) vereinbarst du am besten im private-Abschnitt des Formulars TForm2. Das Erzeugen der Instanz gehört in die Methode FormCreate:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  lanfs_system := TLANFS_KERNAL.Create;
  lanfs_system.OnReceivedData := Form2.test; // hier passiert nun kein Fehler mehr :-)
end;
Zum Freigeben der Instanz benötigst du noch die Methode FormDestroy, die du auf die gleiche Weise wie FormCreate erstellen kannst. Sie sollte so aussehen:

Delphi-Quellcode:
procedure TForm2.FormDestroy(Sender: TObject);
begin
  lanfs_system.Free;
end;
Versuche es einmal mit diesen Änderungen. Sollten noch Fehler auftreten, meldest du dich wieder.

Gruß Hawkeye

alleinherrscher 25. Mai 2006 20:02

Re: eigenes Event programmieren?
 
Juhu, es klappt! 99999999999999999999999999mal dankeschön, Hawkeye219!!!!!!!

Ich werde hier hoch und heilig versprechen, mich mehr mit Classen und Unit Deklarationen zu beschäftigen!

Danke, Danke, Danke!

Du hast was gut bei mir :D

Liebe Grüße,
Alleinherrscher


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz