AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Initialisierung falsch !

Ein Thema von TERWI · begonnen am 20. Aug 2022 · letzter Beitrag vom 25. Aug 2022
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Initialisierung falsch !

  Alt 21. Aug 2022, 16:13
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 ....

Uwe's Antwort macht's dann noch etwas klarer.
Zitat:
Niemand hat behauptet dass Programmieren einfach sei.
GENAU !
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Initialisierung falsch !

  Alt 21. Aug 2022, 16:18
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Initialisierung falsch !

  Alt 21. Aug 2022, 18:32
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#24

AW: Initialisierung falsch !

  Alt 22. Aug 2022, 00:52
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.
$2B or not $2B

Geändert von himitsu (22. Aug 2022 um 01:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Initialisierung falsch !

  Alt 24. Aug 2022, 20:28
... 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

AW: Initialisierung falsch !

  Alt 24. Aug 2022, 20:51
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?

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 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.
$2B or not $2B

Geändert von himitsu (24. Aug 2022 um 20:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Initialisierung falsch !

  Alt 24. Aug 2022, 21:09
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)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#28

AW: Initialisierung falsch !

  Alt 24. Aug 2022, 21:23
 if (Assigned(LOGGER) AND FDoLog) then LOGGER.LOG('VLC', S1, S2); Ist Logger ein entsprechende Methode zugewiesen? Wenn ja, wo?

Und:FDoLog := false; Die Zuweisung von FDoLog := DoLog; erfolgt erst nach dem Log('CREATE', '... begin'); , von daher ist das Fehlen des Begin bei ..... 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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#29

AW: Initialisierung falsch !

  Alt 24. Aug 2022, 22:33
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');
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Initialisierung falsch !

  Alt 25. Aug 2022, 02:39
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.

Geändert von TERWI (25. Aug 2022 um 02:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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