![]() |
AW: Initialisierung falsch !
Tja, denke mal da hat sich jemand was dabei gedacht und es hat einen tieferen SInn, warum OnActivate (und was auch immer noch) "umgeleitet" wird.
Man kann das jetzt so oder so sehen ... wichtig ist, es zu wissen ! Dann sucht man nicht tagelang rum und versteht die Welt nicht mehr. Und ehrlich gesagt: Hätte ich hier den Debugger benutzt, hätte mir die Anzeige wie in jaenicke's Bild auch keinen CM weitergebracht. Wäre mir die "andere" Reihenfolge nicht im LOG aufgefallen, hätte ich wahrscheinlich in letzter Not die IDE neu installiert .... :shock: Uwe's Antwort macht's dann noch etwas klarer. Zitat:
|
AW: Initialisierung falsch !
Nachtrag:
In der OH steht auch nur das drin, wie ich meinte es zu wissen Zitat:
|
AW: Initialisierung falsch !
Da steht doch deutlich "Wenn Visible True ist, wird das Steuerelement angezeigt.". Und genau das ist doch auch der Fall: Sobald das Programm ausgeführt wird, ist das Fenster sichtbar, genauso wie es bei jeder Komponente auf einem Formular auch der Fall ist, wenn Visible auf True steht.
Formulare werden zur Laufzeit im Grunde genauso geladen wie jede andere Komponente. |
AW: Initialisierung falsch !
Bei der Mainform (die erste Form über Application.CreateForm) wird sie nach dem Laden immer auf Visible=True (Show) gesetzt.
Andere Forms werden sichtbar, wenn der Entwickler es danach sagt, also Show oder ShowModal (wenn die auch mit Visible=False designed wurden). Und vor ShowModal muß die Form sowieso immer Visible=False sein. Mit Visible=False hat man nach dem Erstellen (Create) auch noch genug Zeit um irgendwas einzustellen, vor dem Anzeigen. |
AW: Initialisierung falsch !
... es wird immer verrückter.
Das Proggie funzt zwar i.d.R., aber mit ist aufgefallen, das so einige LOG-Zeilen fehlen. Dachte erst der Logger spinnt ... nein tut er nicht. Die im neu aufgebauten Projekt zuletzt in der IDE hinzugefügte Form ZatVLC weigert sich beharrlich, LOGs anzuzeigen ... bis auf 2 (s.u.) Damit nicht wieder diese Fragen wie "... und was ist mit Code ?" kommen, hier nun diverses. Die Projektdatei:
Delphi-Quellcode:
Die Initialisierung - Auruf über OnShow der MainForm:
program ZATTOO;
uses Vcl.Forms, LOGGER5 in 'LOGGER5.pas' {LOGGER}, uHTTP in 'uHTTP.pas', ZAT_MAIN in 'ZAT_MAIN.pas' {ZATMain}, ZAT_LIB in 'ZAT_LIB.pas' {ZatLIB}, ZAT_CHL in 'ZAT_CHL.pas' {ZatChl}, ZAT_CHLSEL in 'ZAT_CHLSEL.pas' {chl_BOX}, ZAT_EPG in 'ZAT_EPG.pas' {ZatEpg}, ZAT_INFO in 'ZAT_INFO.pas' {ZatINFO}, ZAT_VLC in 'ZAT_VLC.pas' {ZatVLC}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TZATMain, ZATMain); Application.CreateForm(TZatLIB, ZatLIB); Application.CreateForm(TZatChl, ZatChl); Application.CreateForm(Tchl_BOX, chl_BOX); Application.CreateForm(TZatEpg, ZatEpg); Application.CreateForm(TZatINFO, ZatINFO); Application.CreateForm(TZatVLC, ZatVLC); Application.Run; end.
Delphi-Quellcode:
Die neue Zat_VLC.pas (DFM dazu ist eine blanke Form mit nix drin):
procedure TZatMAIN.FormInit(Sender: TObject);
begin Log('INIT', '... INIT MODULES ...'); if FIsInit then exit; // ZatLIB._Init(Dispatcher); ZatCHL._Init(Dispatcher); chl_BOX._Init(Videopanel, ChangeChannel); ZatEPG._Init(Dispatcher, VideoPanel); ZatINFO._Init(Videopanel); ZatVLC._Init(Dispatcher, VideoPanel, 'ZATTOO', // name for graph TRUE); // DO LOG FIsInit := true; // State neccessary for RESIZE !!! end;
Delphi-Quellcode:
... und nun die LOG-Datei dazu:
unit ZAT_VLC;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, LOGGER5; type TResponse = procedure(Typ, Mode, Result : integer) of object; TZatVLC = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FResponse : TResponse; FVideoPanel : TPanel; FName : string; FDoLog : boolean; procedure LOG(S1, S2 : string); public function _Init(Response : TResponse; Panel : TPanel; Name : string; DoLog : boolean = true) : integer; end; var ZatVLC: TZatVLC; implementation {$R *.dfm} procedure TZatVLC.FormCreate(Sender: TObject); begin Log('CREATE', '... begin'); FResponse := NIL; FVideoPanel := NIL; FName := ''; FDoLog := false; Log('CREATE', '... end'); end; procedure TZatVLC.FormDestroy(Sender: TObject); begin Log('DESTROY', '... begin'); // das hier nur damit was passiert .... FResponse := NIL; FVideoPanel := NIL; FName := ''; FDoLog := false; Log('DESTROY', '... end'); end; function TZatVLC._Init(Response : TResponse; Panel : TPanel; Name : string; // for naming graho and ROT DoLog : boolean = true) : integer; begin Log('DoInit', ' ...begin'); result := -1; FResponse := Response; FVideoPanel := Panel; FName := Name; FDoLog := DoLog; Log('DoInit', ' ...end'); end; procedure TZatVLC.LOG(S1, S2 : string); begin if (Assigned(LOGGER) AND FDoLog) then LOGGER.LOG('VLC', S1, S2); end; end.
Delphi-Quellcode:
Bemerkungen zu siehe nachgetragen in der LOG-Datei.
[20:14:40:543] [LOG - CREATE]: ... OK !
[20:14:40:606] [MAIN - CREATE]: ... begin [20:14:40:612] [MAIN - CREATE]: ... end [20:14:40:612] [ZATLIB - CREATE]: ... begin [20:14:40:628] [ZATLIB - CREATE]: ... end [20:14:40:644] [CHL - Create]: ...begin [20:14:40:644] [CHL - Create]: ...end [20:14:40:644] [CHLBOX - Create]: ...begin [20:14:40:644] [CHLBOX - Create]: ...end [20:14:40:644] [EPG - Create]: ...begin [20:14:40:644] [EPG - Create]: ...end [20:14:40:659] [INFO - Create]: ...begin [20:14:40:659] [INFO - Create]: ...end [20:14:40:675] [MAIN - INIT]: ... INIT MODULES ... [20:14:40:675] [ZATLIB - DoInit]: ...begin [20:14:40:675] [ZATLIB - DoInit]: ...end [20:14:40:675] [CHL - DoInit]: ...begin [20:14:40:675] [CHL - DoInit]: ...end [20:14:40:675] [CHLBOX - DoInit]: ...begin [20:14:40:691] [CHLBOX - DoInit]: ...end [20:14:40:691] [EPG - DoInit]: ...begin [20:14:40:691] [EPG - DoInit]: ... end [20:14:40:691] [INFO - DoInit]: ...begin [20:14:40:691] [INFO - DoInit]: ...end ..... wo ist das "[VLC - DoInit]: ...begin" geblieben `? [20:14:40:691] [VLC - DoInit]: ...end [20:14:42:765] [MAIN - CLOSE]: ... start [20:14:42:765] [MAIN - CLOSE]: ... end [20:14:42:765] [VLC - DESTROY]: ... begin ..... wo ist das "[VLC - DESTROY]: ... end" geblieben `? [20:14:42:765] [INFO - Destroy]: ...begin [20:14:42:765] [INFO - Destroy]: ...end [20:14:42:765] [EPG - DESTROY]: ...begin [20:14:42:765] [EPG - DESTROY]: ...end [20:14:42:765] [CHLBOX - Destroy]: ...begin [20:14:42:765] [CHLBOX - Destroy]: ...end [20:14:42:765] [CHL - Destroy]: ...begin [20:14:42:765] [CHL - Destroy]: ...end [20:14:42:765] [ZATLIB - DESTROY]: ... begin [20:14:42:765] [ZATLIB - DESTROY]: ... end [20:14:42:781] [MAIN - DESTROY]: ... start [20:14:42:781] [MAIN - DESTROY]: ... end Der Logger loggt sauber bis zum Ende durch. Alle Formen sind prinzipiell wie die ZAT_VLC aufgebaut. Initialisiert auch so wie gedacht und umgekehrt beim beenden. Bei jeder weiteren Form das gleiche/ähnliche Spielchen. Sehe ich da was nicht ? Es sind nur die benötigten Dateien im Verzeichnis. Von den Projektdaten bis auf die DPR alles gelöscht. Auch alle DCU's. Quasi ein nacktes Projekt. |
AW: Initialisierung falsch !
Erstmal solltest du einfach mal in die Forms sehen, ob wirklich die Events (OnCreate) angehängt sind.
Zitat:
Rate mal was passiert, wenn die Form nicht da ist und du Methoden davon aufrufen willst. Und nun rate auch mal was der Debugger da helfen kann. z.B. Haltepunkt auf
Delphi-Quellcode:
und die Maus über ZatLIB halten, oder diese Variable in die "überwachten Ausrücke" aufnehmen. (in den "lokalen Variablen" sieht man sie natürlich nicht)
ZatLIB._Init(Dispatcher);
Haltepunkte [F5] auf Application.Initialize; Application.CreateForm(TZatVLC, ZatVLC); und ZatLIB._Init(Dispatcher); dann F9 ab den Haltepunkten weiter mit F8 und schauen was passiert. Im nächsten Durchlauf, wenn man eine Stelle entdeckt hatte, ab welcher es falsch läuft, einmal mit F7 reingehn, falls man nich bereits aus der "knallenden Position" oder aus dem Stacktrace was erkennt. Beim Halt an einer Exception, wenn man nichts sieht, dann nochmal F7 ... mehr als noch mehr schiefgehn kann eh nicht und mit etwas Glück wird es besser. |
AW: Initialisierung falsch !
Stimmt - OnCreate fehlt da auch. Hab ich vergessen zu notieren.
Der OnCreate-Event ist definitv besetzt ! Mit der "Vorgängerdatei" ging das ja auch (siehe eingangs) und das funktioniert auch alles anscheinend und ES KNALLT NIRGENDWO ! Wenn ich alle auskarkierten LOG() in den _Init's, FormCreate/-Destroy setze, sehe ich auch alle.... NUR DIE ZAT_VLC eben nicht (mehr). Und nun bitte nicht lachen: Ich hab einige F-Tasten hier am Schleppi kaputt. Auch F9. Das wird schwierig mit dem Debugger.... (Das ist kein Witz) |
AW: Initialisierung falsch !
Delphi-Quellcode:
Ist Logger ein entsprechende Methode zugewiesen? Wenn ja, wo?
if (Assigned(LOGGER) AND FDoLog) then LOGGER.LOG('VLC', S1, S2);
Und:
Delphi-Quellcode:
Die Zuweisung von
FDoLog := false;
Delphi-Quellcode:
erfolgt erst nach dem
FDoLog := DoLog;
Delphi-Quellcode:
, von daher ist das Fehlen des Begin bei
Log('CREATE', '... begin');
Delphi-Quellcode:
korrekt, es wäre eher verwunderlich, wenn es ausgegeben würde.
..... wo ist das "[VLC - DoInit]: ...begin" geblieben `?
Delphi-Quellcode:
Wenn die F-Tasten kaputt sind: Du kann alles auch per Maus über das Menü erreichen. Gibt halt dann ein paar zusätzliche Kilometer, die die Maus laufen muss.
function TZatVLC._Init(Response : TResponse;
Panel : TPanel; Name : string; // for naming graho and ROT DoLog : boolean = true) : integer; begin FDoLog := DoLog; // Bevor diese Zuweisung erfolgt, kann nicht geloggt werden. // In Log muss FDoLog zur Ausgabe zwingend = true sein. // Da _Init nach dem FormCreate erfolgt, kann aus dem FormCreate // kein Eintrag im Logfile stehen. Log('DoInit', ' ...begin'); result := -1; FResponse := Response; FVideoPanel := Panel; FName := Name; Log('DoInit', ' ...end'); end; F9 ist einfach nur: Programm starten, da das bei Dir ja funktioniert, nimmst Du da weiterhin den funktionierenden Weg. |
AW: Initialisierung falsch !
Wenn ich das richtig verfolge, wird FDoLog erst kurz vor DoInit-end auf true gesetzt. Alles davor kann somit nicht im Log erscheinen.
Delphi-Quellcode:
FDoLog := DoLog;
Log('DoInit', ' ...end'); |
AW: Initialisierung falsch !
Redo ...
Ich nehme alles zurück und behaupte das Gegenteil... Uwe hat Recht - mein Fehler, jetzt hab ich*s auch gesehen ' ... AND FDoLog' ist das Prob. Ich schäme mich zutiefst, das ich das nicht selbst gesehen habe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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