Hmm, war ja ne Idee wert - hab ich den Logger mal sich selbst loggen lassen (wo es geht).
Hier der LOG von:
- 2x mal Fenster erzeugen/freigeben
- 1x Fenster erzeugen
- Logger beenden
Code:
destructor TLOG.Destroy;
begin
FOnDestroy := true; // das scheint absolut nicht zu interessieren im OnDesrtoy des Fensters
SetLogWin(false); // ..... hier schon
if Assigned(FLOGWIN) then FLOGWIN.Free; // FEHLER, wenn nicht ausmarkiert !
SetLogFile(false);
...
inherited destroy;
end;
Das LOG:
Code:
[18:31:25:640] [LOGGER - MAIN]: .... Logger created
[18:31:29:171] [LOGGER - SetLogWin = true]: create
[18:31:29:187] [LOG_WIN - OnCreate]: ....
[18:31:38:671] [LOGGER - SetLogWin = false]: Destroy manually
[18:31:38:671] [LOG_WIN - OnDestroy]: Destroy manually
[18:31:41:859] [LOGGER - SetLogWin = true]: create
[18:31:41:859] [LOG_WIN - OnCreate]: ....
[18:31:45:875] [LOGGER - SetLogWin = false]: Destroy manually
[18:31:45:875] [LOG_WIN - OnDestroy]: Destroy manually
[18:31:51:859] [LOGGER - SetLogWin = true]: create
[18:31:51:859] [LOG_WIN - OnCreate]: ....
[18:31:54:765] [LOG_WIN - OnDestroy]: Destroy manually
[18:31:54:765] [LOGGER - SetLogWin = false]: Destroy in destructor
Das letzte 'Destroy manually' kommt aus dem OnDestroy des Fensters - und zwar vor dem Aufruf der eigentlichen Routine 'SetLogWin(false)' !
Für mich macht das den Eindruck, als wenn der Destructor der Loggers selbst das Fenster schon gleich beim Aufruf zumacht - wenn es denn noch da ist.
FLOGWIN ist dann aber nicht NIL.
.... sehr eigenartig.