![]() |
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:
Ich habe eine neues Projekt angelegt und exakt identisch aufgebaut.
[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 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:
Wie kann das sein / kommen ?
[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 Ich sehe und finde einfach keinen Fehler im Quelltext. Trat gestern nachmittag urplötzlich auf. ... jede Mende Access-Violations weil Vars nicht initialisiert. |
AW: Initialisierung falsch !
Zitat:
|
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. |
AW: Initialisierung falsch !
Zitat:
Ein LOG File reicht hierzu einfach nicht aus. |
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. |
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. |
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. |
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: |
AW: Initialisierung falsch !
Zitat:
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: |
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. |
AW: Initialisierung falsch !
Zitat:
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:
Damit wird der Handler nur einmal aufgerufen.
OnPaint := nil;
|
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. |
AW: Initialisierung falsch !
Zitat:
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. |
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 ...) |
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). |
AW: Initialisierung falsch !
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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. |
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. |
AW: Initialisierung falsch !
Zitat:
|
AW: Initialisierung falsch !
Zitat:
|
AW: Initialisierung falsch !
Zitat:
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. |
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. |
AW: Initialisierung falsch !
Zitat:
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... |
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. |
AW: Initialisierung falsch !
Zitat:
|
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 03:51 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