Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Initialisierung falsch ! (https://www.delphipraxis.net/211244-initialisierung-falsch.html)

TERWI 20. Aug 2022 19:00

Initialisierung falsch !
 
Seit gestern zeigt mein Projekt ein sehr kurioses Verhalten.
Irgendwie kommt das FormCreate von LAV nicht zum richtigen Zeitpunkt
In MAIN.OnActivate wird LAV.DOINIT ausgeführt.
LAV.FormCreate kommt putzigerweise aber erst danach.
Das führt zu katastrophalen Initialisierungsfehlern !
Das LOG davon:
Code:
[19:21:45:934] [LOG - CREATE]: ... OK !
[19:21:45:934] [LOG - INIT]: ...
[19:21:45:934] [LOG - SETMODE]: W: True - F: True - FD:
[19:21:45:934] [LOG - SetLogWin]: Mode: True
[19:21:45:934] [LOG - SetLogFile]: ... YES
[19:21:46:018] [MAIN - CREATE]: ... begin
[19:21:46:018] [MAIN - LoadINI]: LOAD: F:\PRJx64\ZATTOO_LAV\ZATTOO.INI
[19:21:46:018] [MAIN - CREATE]: ... end
[19:21:46:018] [MAIN - ACTIVATE]: ... INIT MODULES ...
[19:21:46:018] [MAIN - SetVideoDisplayMode]: ... change-1
[19:21:46:018] [LAV - DoInit]: ...begin
[19:21:46:018] [LAV - DoInit]: ...end
[19:21:46:050] [LAV - CREATE]: ... begin
[19:21:46:050] [LAV - CREATE]: ... end
[19:23:12:274] [LAV - DESTROY]: ... start
[19:23:12:274] [LAV - DESTROY]: ... end
[19:23:12:290] [MAIN - DESTROY]: ... start
[19:23:12:290] [MAIN - DESTROY]: ... end
[19:23:12:290] [LOG - DESTROY]: LOGGER to be destoyed ...
[19:23:12:290] [LOG - SetLogWin]: Mode: False
Ich habe eine neues Projekt angelegt und exakt identisch aufgebaut.
Hier sieht das LOG korrekt aus.
So wie es sein sollte, kommen erst die beiden Creates der 2 Forms und dann das Activate der Main-Form mir dem Aufruf von LAV.DOINIT.
Code:
[19:47:13:869] [LOG - CREATE]: ... OK !
[19:47:13:869] [LOG - INIT]: ...
[19:47:13:869] [LOG - SETMODE]: W: True - F: True - FD:
[19:47:13:869] [LOG - SetLogWin]: Mode: True
[19:47:13:869] [LOG - SetLogFile]: ... YES
[19:47:13:891] [MAIN - CREATE]: ... begin
[19:47:13:891] [MAIN - CREATE]: ... end
[19:47:13:891] [LAV - CREATE]: ... begin
[19:47:13:891] [LAV - CREATE]: ... end
[19:47:13:907] [LAV - DoInit]: ...begin
[19:47:13:907] [LAV - DoInit]: ...end
[19:47:22:034] [LAV - DESTROY]: ... start
[19:47:22:034] [LAV - DESTROY]: ... end
[19:47:22:034] [MAIN - DESTROY]: ... start
[19:47:22:034] [MAIN - DESTROY]: ... end
[19:47:22:034] [LOG - DESTROY]: LOGGER to be destoyed ...
[19:47:22:034] [LOG - SetLogWin]: Mode: False
Wie kann das sein / kommen ?
Ich sehe und finde einfach keinen Fehler im Quelltext.
Trat gestern nachmittag urplötzlich auf.
... jede Mende Access-Violations weil Vars nicht initialisiert.

Uwe Raabe 20. Aug 2022 19:01

AW: Initialisierung falsch !
 
Zitat:

Zitat von TERWI (Beitrag 1510397)
Ich sehe und finde einfach keinen Fehler im Quelltext.

Komisch, ich auch nicht...

TERWI 20. Aug 2022 19:34

AW: Initialisierung falsch !
 
Die Quizfrsge ist ja: Warum wird (neuerdings) das FormCreate der 2. Form nicht vor dem OnActivate der 1. Form ausgeführt ?
Darauf habe ich doch im Compiler überhaupt keinen Einfluss.

venice2 20. Aug 2022 19:38

AW: Initialisierung falsch !
 
Zitat:

Ich sehe und finde einfach keinen Fehler im Quelltext.
Die Quizfrage ist wohl eher und auf was Uwe Rabe hinaus wollte mit seinem Kommentar das er nun mal ohne Quelltext nichts sehen kann. :glaskugel:
Ein LOG File reicht hierzu einfach nicht aus.

TERWI 20. Aug 2022 19:54

AW: Initialisierung falsch !
 
... das hatte ich schon verstanden.
Nur ist der reichlich lang.
Was ich nicht verstehe, ist eben das bereits o.g.
Bis gestern Mittag funzte das alles bis die Fehler beim nächsten kompilieren auftraten.
Die wenigen gemachten Änderungen hatte ich wieder auskommentiert, aber diese merkwürdige Ini-Reihenfolge bleibt hartnäckig.
Ich habe heute wie gesagt das "baugleiche" Projekt ohne Inhalt noch mal gemacht - das läuft.
Das org. Projekt habe ich Routine für Routine soweit auskommentiert, so das nur 2 Formen übrigbleiben und bis beide (im LOG) quasi das gleiche zeigen müssten.
Tun sie aber eben in der Reihenfolge nicht.
Warum ?
OnActivate der Main-Proc kommt doch erst, wenn alle Creates fertig sind - siehe 2. LO oben.

venice2 20. Aug 2022 20:10

AW: Initialisierung falsch !
 
Ich sehe laut Log nur zwei unterschiede einmal das die INI geladen wird und einmal nicht.
Es muß doch möglich sein herauszufinden warum dies der Fall ist.
Debugger ist dein Freund.

TERWI 20. Aug 2022 21:03

AW: Initialisierung falsch !
 
Das die INI im 2. nicht da ist, ist unwichtig.
Dann schau dir bitte mal genau die Reihenfolgen an.

Im 1.LOG:
... MAIN.CREATE
... LAV.DOINIT (in MAIN.ACTIVATE) -> FALSCH
... LAV.CREATE -> FALSCH, muss vor ACTIVATE kommen !

Im 2. LOG
... MAIN.CREATE
... LAV.CREATE
... LAV.DOINIT (in MAIN.ACTIVATE)

Ich selbst kann da in der Form ja nichts an der Reihenfolge drehen.

himitsu 20. Aug 2022 21:48

AW: Initialisierung falsch !
 
Visible der Form steht nicht auf True?

Ansonsten ... du hast einen Debugger, du hast den Code, welchen wir nicht haben, also wirst du wohl mal mit dem Debugger schauen, von wo was aufgerufen wird, was da falsch ist.



Und natürlich hast du eine Versionsverwaltung (oder zumindesten die Historie im Delphi) und somit kannst du auch sehen was sich geändert hat. :roll:

venice2 20. Aug 2022 22:05

AW: Initialisierung falsch !
 
Zitat:

Das die INI im 2. nicht da ist, ist unwichtig.
Wenn du das sagst.

Aber genau hier könnte dein Problem liegen das diverse Dinge beim laden für verschiedene Einstelllungen
es verhindert das Activate eben nicht vorher aufgerufen wird. Oder eben doch!

Aber was weiß Ich schon. Kein Quelltext kann nicht debuggen schaue also in eine :glaskugel:

TERWI 21. Aug 2022 11:13

AW: Initialisierung falsch !
 
@himitsu
Ja, visible ist true.
Vom Debugger hab ich null Plan - seit dem es den für TurboPascal/Delphi gab, hab ich den niebenutzt/benutzen müssen...

@venice2 u. a.

OnActivate ist ein Event der Form und wird nur aufgerufen, wenn ich im Objektinspektor unter den Ereignissen entsprechend eine Funktion eintrage.

Nach meinem Kenntnisstand werden zunächst alle ( ! ) geladenen Forms nach
"Application.Initialize"
über FormCreate initialisiert (sofern dort jeweils was im OI eingetragen ist).

Erst dann folgt mittels
"Application.Run"
das OnActivate/OnShow der ersten nach
"Application.Initialize" bzw.
"Application.MainFormOnTaskbar := True"
in der Projektdatei eingetragen Form.

Wenn ich mit einer anderen Form starten will, tausche ich die dort entsprechend aus.
Ansonsten hat der User doch keine Möglichkeit, die (grundlegende) Initialisierungsreihenfolge zu ändern.
.... oder ?

Im meinem Proggy wird OnActivate auch definitiv nicht irgendwie im Programm (aus versehen) "fremdgestartet". Alles zig mal geprüft.
Nehme ich das im OI raus, wirds auch nicht aufgerufen.

Ich hab nun folgendes gemacht:

Wie gesagt neues Projekt mit Standard-Grundstruktur zeigt diesen Fehler (logo ?!) nicht.

Die MainForm aus meinem ursprüglichen Projekt reinkopiert (PAS & DFM):
-> Fehler wieder da !
Das liegt also an der Form, nicht an den Projekteinstellungen ? Wo ? Ich finde absolut nchts.

Dann habe ich im neuen Projekt noch mal eine neue MainForm angelegt.
Die DFM sieht zwar m.M.n. auch "normal" aus und es steht auch dort NUR EINMAL OnActivate drin - ich habe die DFM aber sicherheitshalber nicht nicht kopiert, sondern mit Copy|Paste nur den Inhalt (also quasi neu bestückt).

Den Code habe ich Proc für Proc einzeln rüberkopiert und jeweils komiliert um zu sehen, wann dieses Init-Prob wieder auftritt.

ES TRITT NICHT WIEDER AUF !
Hab nun eine exakte Kopie der Form Zeile für Zeile sowie auch von der Darstellung.
Es lag also nicht am Code oder ggf. irgendwelchen obskuren Elementen auf der Form oder an irgendwelchen Event-Aufrufen.
Alles lüppt wie gewohnt und bis vorgestern auch gelaufen.
Nur die org. Form zeigt dieses sehr merkwürdige Verhalten.

Ich ba keinen Schimmer, wo man diesn Bug ( ? ) noch suchen könnte.

peterbelow 21. Aug 2022 11:33

AW: Initialisierung falsch !
 
Zitat:

Zitat von TERWI (Beitrag 1510437)

Ich ba keinen Schimmer, wo man diesn Bug ( ? ) noch suchen könnte.

Es gibt da die Property OldCreateOrder, False als Default. Vielleicht hast Du die in deinem Problemprojekt mal versehendlich auf True gesetzt...

Einen guten Punkt für die (nur einmal auszuführende) Initialisierung eines Forms zu finden ist manchmal nicht einfach. Ich habe dafür oft den OnPaint-Event des Forms verwendet. Die erste Zeile darin ist dann

Delphi-Quellcode:
  OnPaint := nil;
Damit wird der Handler nur einmal aufgerufen.

TERWI 21. Aug 2022 12:16

AW: Initialisierung falsch !
 
... daran hatte ich auch schon gedacht und auch die Props alle durchgesehen.
OldCreateOrder ist false.

Na ja, OnPaint kommt ja relativ oft.
OnActivate m.W.n. nur wenn das Fenster den Focus bekommt.
Man könnte auch OnShow nehmen - das wäre (hier) egal.

Da ich früher zu oft auf die Nase gefallen bin, was zu initialisierende var's/Programmteile betrifft, hat sich bei mir eingebürgert:
- Alle Units/Forms de-/intialisieren im jeweiligen Create/Destroy ihre eigenen Kamellen.
- Jede Unit/Form hat für eine Fremd-Intitialisierung eine DoINIT/DoExit Prozedur, wo alles weitere wichtige zur Laufzeit übergeben wird.
- Die MainForm lädt/erzeugt alles wichtige in OnActivate (die Forms sind dann mit Create durch...) und gibt dann an alle DoINITs weiter.
Damit ist alles fertig eingerichtet und wenn die Form erscheint, ist alles passend da.

Bei meinem Problem hier kam eben das OnActivate der Main VOR ( ! ) dem Create der Form LAV.
Da fehlten dann ein paar elementare Zuweisungen, so dass es beim Programmstart wie Beenden dauernd mehrfach "geknallt" hat.

himitsu 21. Aug 2022 12:51

AW: Initialisierung falsch !
 
Zitat:

Ja, visible ist true.
Selbst Schuld, denn hier ist die Form bereits im Inherited des Create und somit auch lange vor dem OnCreate sichtbar, weil es bereits sichtbar geladen wird.


In fast 30 Jahren hätte es aber genug Zeit gegeben, sich mal mit dem Debugger zu beschäftigen.

IDE (Texteditor mit Highlighting), Compiler und Debugger in einer Anwendung, das war gerade der große Fortschritt, den uns Turbo Pascal und Delphi gebracht haben.

TERWI 21. Aug 2022 13:13

AW: Initialisierung falsch !
 
Die goldene F1-Taste geht heute an ........ himitsu !

Asche auf mein Haupt - da hatte ich wohl nicht richtig hingeguckt, bzw. in der falschen Form nachgesehen.
Im der alten Main ist visinle = true, in der neuen false (default ?!).
Kann mich nicht erinnern, das mal bewusst geändert zu haben.
Mal juxeshalber auf true gesetzt und bumms.

Das dieses (für mich) eher unscheinbare Property die Reihenfolge derart beeinflusst, war mir bisher nicht bekannt.
Man lernt nie aus ....
Auf jeden Fall hat das hier an 2 Tagen ne Menge Ärger und Arbeit gemacht - vergessen werde ich das sicher nicht mehr !

(... der Debugger hätte mir wahrscheinlich vom Sinn her das gleiche gesagt wie mein LOG, aber auch nicht warum ...)

himitsu 21. Aug 2022 13:30

AW: Initialisierung falsch !
 
Ja, früher war es mal defult True ... seit 'ner Weile (jahrzehnte) ist es nun Default false.

Genauso wie sich die Ausführung von OnCreate verschoben hat (jetzt im AfterCreate und früher schon im Create) ... beim Upgrade alter Projekte/Forms in neuen Delphi wird daher das neue OldCreateOrder auf True gesetzt (was aber per Default auf False steht).

jaenicke 21. Aug 2022 13:53

AW: Initialisierung falsch !
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von TERWI (Beitrag 1510448)
(... der Debugger hätte mir wahrscheinlich vom Sinn her das gleiche gesagt wie mein LOG, aber auch nicht warum ...)

Doch, da siehst du genau, wo das ausgelöst wird:

Anhang 55318

Eben bereits beim Erstellen, weil die Form Visible direkt im FormStatus hat. Hättest du das gepostet, hätte es dir direkt jemand sagen können.

TERWI 21. Aug 2022 14:58

AW: Initialisierung falsch !
 
Hätte ich das gewusst, was visible da im Detail alles macht, hätte es diesen Fred gar nicht gegeben.
Ich war bisher der Meinung, das beeinflusst nur die Anzeige selbst.
... nun bin ich ja wieder etwas schlauer.

venice2 21. Aug 2022 15:01

AW: Initialisierung falsch !
 
Zitat:

Ich war bisher der Meinung, das beeinflusst nur die Anzeige selbst.
Tja die IDE ist schon sehr suspekt.

Uwe Raabe 21. Aug 2022 15:07

AW: Initialisierung falsch !
 
Zitat:

Zitat von TERWI (Beitrag 1510455)
Hätte ich das gewusst, was visible da im Detail alles macht, hätte es diesen Fred gar nicht gegeben.
Ich war bisher der Meinung, das beeinflusst nur die Anzeige selbst.

Es beeinflusst ja auch nur die Anzeige - genauer, ob das Form beim Create angezeigt wird oder nicht. Indirekt beeinflusst es damit halt auch den Zeitpunkt der Anzeige. Das hat aber nichts mit der IDE zu tun (geschieht ja eh alles zur Runtime), sondern mit dem DFM-Streaming. Was das FormCreate betrifft spielt das OldCreateOrder dann ja auch noch eine Rolle bezüglich der Aufruf-Reihenfolge. Niemand hat behauptet dass Programmieren einfach sei.

venice2 21. Aug 2022 15:10

AW: Initialisierung falsch !
 
Zitat:

Das hat aber nichts mit der IDE zu tun (geschieht ja eh alles zur Runtime)
Sicher ?

Fakt ist doch das es innerhalb der IDE definiert Eingestellt werden muß.
Inwiefern hat es dann mit der IDE nichts zu tun.

Wegen dieser Zwiespältigkeit arbeite ich lieber ohne soweit dies möglich ist.
Ok! Bin raus Thema scheint ja erledigt zu sein.

TERWI 21. Aug 2022 15:13

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:

Niemand hat behauptet dass Programmieren einfach sei.
GENAU ! 8-)

TERWI 21. Aug 2022 15:18

AW: Initialisierung falsch !
 
Nachtrag:
In der OH steht auch nur das drin, wie ich meinte es zu wissen
Zitat:

Bestimmt, ob die Komponente auf dem Bildschirm angezeigt wird.

Mit der Eigenschaft Visible können Sie die Sichtbarkeit des Steuerelements zur Laufzeit steuern. Wenn Visible True ist, wird das Steuerelement angezeigt. Hat die Eigenschaft den Wert False, ist es nicht zu sehen.

jaenicke 21. Aug 2022 17:32

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.

himitsu 21. Aug 2022 23:52

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.

TERWI 24. Aug 2022 19:28

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:
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.
Die Initialisierung - Auruf über OnShow der MainForm:
Delphi-Quellcode:
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;
Die neue Zat_VLC.pas (DFM dazu ist eine blanke Form mit nix drin):
Delphi-Quellcode:
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.
... und nun die LOG-Datei dazu:
Delphi-Quellcode:
[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
Bemerkungen zu siehe nachgetragen in der LOG-Datei.
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.

himitsu 24. Aug 2022 19:51

AW: Initialisierung falsch !
 
Erstmal solltest du einfach mal in die Forms sehen, ob wirklich die Events (OnCreate) angehängt sind.

Zitat:

wo ist das "[VLC - DoInit]: ...begin" geblieben `?
Ja, und wo ist das "Create" geblieben? :roll:

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:
ZatLIB._Init(Dispatcher);
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)



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.

TERWI 24. Aug 2022 20:09

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)

Delphi.Narium 24. Aug 2022 20:23

AW: Initialisierung falsch !
 
Delphi-Quellcode:
 if (Assigned(LOGGER) AND FDoLog) then LOGGER.LOG('VLC', S1, S2);
Ist Logger ein entsprechende Methode zugewiesen? Wenn ja, wo?

Und:
Delphi-Quellcode:
FDoLog := false;
Die Zuweisung von
Delphi-Quellcode:
FDoLog := DoLog;
erfolgt erst nach dem
Delphi-Quellcode:
Log('CREATE', '... begin');
, von daher ist das Fehlen des Begin bei
Delphi-Quellcode:
..... wo ist das "[VLC - DoInit]: ...begin" geblieben `?
korrekt, es wäre eher verwunderlich, wenn es ausgegeben würde.

Delphi-Quellcode:
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;
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.

F9 ist einfach nur: Programm starten, da das bei Dir ja funktioniert, nimmst Du da weiterhin den funktionierenden Weg.

Uwe Raabe 24. Aug 2022 21:33

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');

TERWI 25. Aug 2022 01:39

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.

peterbelow 25. Aug 2022 11:38

AW: Initialisierung falsch !
 
Zitat:

Zitat von TERWI (Beitrag 1510608)
Redo ...

Ich schäme mich zutiefst, das ich das nicht selbst gesehen habe.

Brauchst Du nicht, solche Anfälle von Betriebsblindheit hat wohl schon jeder von uns erlebt. :wink:
Man liest halt oft nicht was da steht sondern was da stehen sollte. Das Gehirn arbeitet halt ziemlich seltsam, seine Autokorrektur ist manchmal wirklich lästig...

jaenicke 25. Aug 2022 13:05

AW: Initialisierung falsch !
 
Und da sind wir wieder beim Thema debuggen. Hättest du an der Stelle durch debuggt, hättest du sofort gesehen, dass das Loggen nicht passiert und wenn du dann die Werte angeschaut hättest, hättest du auch gesehen warum.

Debuggen ist bei der Softwareentwicklung einer der wichtigsten Punkte überhaupt. Ohne kann man nicht sinnvoll arbeiten, nicht im Hobby und schon gar nicht beruflich. Gar nicht.

venice2 25. Aug 2022 13:14

AW: Initialisierung falsch !
 
Zitat:

Zitat von jaenicke (Beitrag 1510674)
Und da sind wir wieder beim Thema debuggen. Hättest du an der Stelle durch debuggt, hättest du sofort gesehen, dass das Loggen nicht passiert und wenn du dann die Werte angeschaut hättest, hättest du auch gesehen warum.

Debuggen ist bei der Softwareentwicklung einer der wichtigsten Punkte überhaupt. Ohne kann man nicht sinnvoll arbeiten, nicht im Hobby und schon gar nicht beruflich. Gar nicht.

Es ist halt ein Problem wenn man nicht weiß an welcher Wand man den Lichtschalter betätigen muß um das Licht an oder auszuschalten.

freimatz 25. Aug 2022 13:56

AW: Initialisierung falsch !
 
Schon, dann debugged man halt und misste alle Leitungen beginnend mit dem Licht durch bis da man ist wo Strom ist :P
Und im Gegensatz zum Elektriker muss ein Softwareentwickler nicht die Wand aufstemmen. :-D

Auch ich stimme dem zu: "Debuggen ist bei der Softwareentwicklung einer der wichtigsten Punkte überhaupt. Ohne kann man nicht sinnvoll arbeiten, nicht im Hobby und schon gar nicht beruflich. Gar nicht."


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz