![]() |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
ups :oops:
$if Declared() und nicht $if Defined() |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Liste der Anhänge anzeigen (Anzahl: 1)
jupp jetzt funktioniert es.
ist die FastMM4_Readme.txt = Anleitung? Edit1: ok hab mich jetzt zumindest mal durch alle Anleitungen durchgewurschtelt, die ich hier gefunden hab und auch die Event-Log-Datei erstellt bekommen. Ich glaube gelesen zu haben, dass man diese von unten lesen soll und werde auch versuchen, mittels Auskommentieren, die Probleme zu finden und somit zu beseitigen. Bei einigen Speicherlecks steht ja auch glücklicher Weise drin, wo sie Auftreten, also die Unit. Hänge mal die Log hier an, vieleicht kann ja mal jemand schauen, ob so ein Fehler drin ist (weiß ja nicht, ob man sowas auf einen Blick erkennt), der mir die Probleme bereitet, die zur Post-Topic gehören. Vielen Dank BAMatze |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Ich vermute du hast nicht ganz verstanden was Uwe Raabe dir sagen wollte:
Delphi-Quellcode:
FOnTischChange wird abgerufen und sofort ausgeführt.
if Assigned(OnTischChange) then OnTischChange;
Dann wird geprüft ob das nicht vorhandene Funktionsergebnis ungleich nil ist. Sollte das der Fall sein, wird FOnTischChange erneut abgerufen und ausgeführt.
Delphi-Quellcode:
Es wird geprüft ob FOnTischChange ungleich nil ist.
if Assigned(FOnTischChange) then FOnTischChange;
Sollte das der Fall sein, wird FOnTischChange ausgeführt. Deshalb führt die erste Variante zur Zugriffsverletzung. Unabhängig davon würde ich jedem Event immer den Sender mitliefern. |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Ah ok dann werde ich die Variante auch nochmal testen am Montag. Wobei der Hinweis mit den Speicherlecks und so ja wie ich sehe auch berechtigt war.
Vielen Dank BAMatze |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Also hab heute mal beide Varianten nochmal durchprobiert, sowohl:
Delphi-Quellcode:
also auch
if assigned(OnTischChange) then OnTischChange;
Delphi-Quellcode:
Bei beiden gibt der Debugger als Wert für FOnTischChange/ OnTischChange eine Zugriffsverletzung bei 00000000 aus. Sieht für mich aus, als wenn er sie gar nicht erzeugt. Hab nochmal direkt in die Komponente, in der ich dieses Event implementieren will geschaut und die dcu-Datei kontrolliert, ob sie im Verzeichnis liegt, wo Delphi drauf zugreift. Das scheint zu passen.
if assigned(FOnTischChange) then FOnTischChange;
Kann es aber trotzdem sein, dass dort ein Problem mit dem Erzeugen des Events vorliegt? BAMatze Edit 1: Der Fehler hat sich gerade erledigt. Habe die Komponente nach dem Motto "keep it simple" in eine leere Form mal gezogen und und das Event getestet. Dort funktioniert es wunderbar. Darauf hin habe ich auch im großen Projekt nochmal die Procedure aus dem Objektinspektor und aus der Deklaration gelöscht. Alles kompilieren lassen, so dass die Event-Prozeduren auch wirklich weg waren und dann nochmal neu erzeugen lassen. Jetzt gibt es keine Probleme und das Event wird so erzeugt, wie ich das möchte. Bleibt eigentlich noch nur die Frage: Ist die Auslösung des Events mit OnTischChange (ist die published Variable) oder FOnTischChange (die private Variable)richtig, auf die OnTischChange eigentlich zurück greift? Denke mal FOnTischChange, sonst könnte man die private Variable ja ganz weg lassen, allerdings bin ich da überhaupt nicht sicher. |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Zitat:
Delphi-Quellcode:
procedure TTischSteuerung.TischChange;
begin if Assigned(FOnTischChange) then FOnTischChange; end; |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Das ist schonmal gut zu wissen. Meine Erfahrung besteht ja eigentlich nur daraus, dass ich einige Varianten hier aus der DP genommen hab, die ich gefunden (oder genannt bekommen) habe und dann ausprobiert (wobei meistens noch mindestens so viele Fehler aufgetreten sind, dass ich hier nochmal nachfragen musste). Habe dich jetzt so verstanden, dass ich meine Komponente wie folgt abändern sollte:
Delphi-Quellcode:
Type TTischsteuerung = class(TWinControl)
private ... //Variablen für Events FOnTischChange: TOnTischChange; ... protected //Events // OnTischChange soll dem Programm die Möglichkeit geben alle Eigenschaften auf den // ausgewählten Tisch auszurichten. property OnTischChange: TOnTischChange read FOnTischChange write FOnTischChange; ... published ... public //alternativ könnte auch die property OnTischChange hier aufgeführt sein ... end; // Rest wie am Anfang des Threats, außer dass if assigned(OnTischChange) then OnTischChange; in if assigned(FOnTischChange) then FOnTischChange; geändert wird |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Zitat:
Delphi-Quellcode:
Das Ganze sieht erstmal etwas komplizierter aus aber es bringt viele Vorteile beim erweitern oder debuggen. Außerdem macht es Borland genauso. :-D
{$M+}
TOnTischChange = procedure(Sender: TObject) of object; Type TTischsteuerung = class(TWinControl) private ... //Variablen für Events FOnTischChange: TOnTischChange; ... protected // die event auslöser procedure doTischChange; ... published property OnTischChange: TOnTischChange read FOnTischChange write FOnTischChange; ... public //alternativ könnte auch die property OnTischChange hier aufgeführt sein ... end; procedure TTischsteuerung.doTischChange; begin if Assigned(FOnTischChanged) then FOnTischChanged(self); end; procedure TTischsteuerung.foo begin ... // Event(s) auslösen doTischChange; ... end; |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
möchte mich mal kurz hier einklinken, hoffe dass ich damit nicht gegen eine Regel verstoße.
warum verwendet ihr
Delphi-Quellcode:
für den Event und nicht TNotifyEvent
TOnTischChange = procedure(Sender: TObject) of object;
Danke und Gruß Dieter |
Re: Event-Typen und warum deren Inhalte manchmal nicht stimm
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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-2025 by Thomas Breitkreuz