Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Seite 1 von 4  1 23     Letzte »    

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