Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Globale Variable im Frame leer? (https://www.delphipraxis.net/46039-globale-variable-im-frame-leer.html)

Zeithase 17. Mai 2005 10:33


Globale Variable im Frame leer?
 
Hallo,

Ich habe einen Splash-Screen, der eine globale Benutzervariable _USERNAME (String, definiert in einer externen globalen Unit) ausliest und setzt. Die MainForm kennt diese Variable ohne Probleme und liest auch den Wert richtig aus. Frame1 sagt zwar nicht, dass die Variable nicht definiert ist, allerdings hat sie keinen Wert dort. Kurze Info zur Initialisierung: zuerst Splash-Screen, dann MainForm, dann wird der Frame1 created. *Nach* dem Frame1.Show wird eine Funktion Frame1.UpdateFrame aufgerufen, die dort definiert ist. Diese soll ein Label mit _USERNAME beschriften, allerdings tut sie es nicht. Habe ich allerdings im Frame einen Button, der die gleiche Funktion ausführt, gibt es keine Probleme und die Variable hat einen Inhalt. Kann mir kurz einer erklären wieso?

Es grüßt,
der Zeithase.

Muetze1 17. Mai 2005 10:35

Re: Globale Variable im Frame leer?
 
Moin!

Wird die Frame schon beim hochfahren angelegt, da sie im Designer auf einer Form liegt? Ausgelöst durch das "AutoCreateForm" in den Projektoptionen? Schonmal in die .DPR geschaut?

MfG
Muetze1

Zeithase 17. Mai 2005 10:36

Re: Globale Variable im Frame leer?
 
Nein, Frame1 wird definitiv erst bei Form1.OnCreate erzeugt.

Eh, kurzes Addon: Rufe ich die Funktionen Frame1.UpdateFrame und Frame1.Show bei Form1.OnCreate auf, ist die Variable leer.. Rufe ich diese über einen Button auf, gibt es auch keine Probleme. It's magic.

Muetze1 17. Mai 2005 10:39

Re: Globale Variable im Frame leer?
 
Moin!

Zitat:

Zitat von Zeithase
Nein, Frame1 wird definitiv erst bei Form1.OnCreate erzeugt.

Eh, kurzes Addon: Rufe ich die Funktionen Frame1.UpdateFrame und Frame1.Show bei Form1.OnCreate auf, ist die Variable leer.. Rufe ich diese über einen Button auf, gibt es auch keine Probleme. It's magic.

Mag ja sein, das du dort eine 2. Instanz anlegst aber die beim Start angelegte Instanz siehst... ... könnte ja sein.

Und dann ist die Frage, wenn Frame1 auf der Form1 liegt, dann bewirkt ja das alles nix, da im OnCreate der Form die Form selber nicht existiert. Somit kann es sehr gut sein, das dein Anlegen der Frame hinfällig ist. Damit wäre die Vermutung von hierdrüber wieder angebracht: siehst du vielleicht eine im Designer auf der Form platzierte Frame? Diese wird nämlich automatisch instanziiert mit der Form und nicht von dir...

MfG
Muetze1

Zeithase 17. Mai 2005 10:43

Re: Globale Variable im Frame leer?
 
Zitat:

Zitat von Muetze1
Moin!
Und dann ist die Frage, wenn Frame1 auf der Form1 liegt, dann bewirkt ja das alles nix, da im OnCreate der Form die Form selber nicht existiert. Somit kann es sehr gut sein, das dein Anlegen der Frame hinfällig ist. Damit wäre die Vermutung von hierdrüber wieder angebracht: siehst du vielleicht eine im Designer auf der Form platzierte Frame? Diese wird nämlich automatisch instanziiert mit der Form und nicht von dir...

Nein, in der Form1 liegt nur ein Panel. Das ist gleichzeitig das Parent für den Frame der nicht schon im Designer existiert.

Kurzer Quelltext von Form1.OnCreate:

Delphi-Quellcode:
Frame_Overview := TFrame_Overview.Create(Self);
Frame_Overview.Parent := MainPanel;
Frame_Overview.UpdateFrame(0);
Frame_Overview.Show;
Es grüßt,
der Zeithase.

Muetze1 17. Mai 2005 10:50

Re: Globale Variable im Frame leer?
 
Moin!

Und schonmal mit einem Brechpunkt in der UpdateFrame() drinne gestanden und nachgeschaut in der darin getätigten Zuweisung, das die Variable was enthält (was sie ja deiner Aussage nach tuten tun soll...

Wenn die Variable da leer ist - schonmal überprüft, das diese Variable _USERNAME nicht vielleicht doppelt vorhanden ist - oder ein Element so heisst? Ansonsten auch schonmal in der Frame bei nicht laufendem Projekt mit gedrückter STRG-Taste auf den Variablennamen _USERNAME geklickt um festzustellen wo der Compiler die Deklaration gefunden hat?

Das Show() bringt eh nix und ist im Normalfall sogar überflüssig.

MfG
Muetze1

Zeithase 17. Mai 2005 10:55

Re: Globale Variable im Frame leer?
 
Hi,

_USERNAME gibt es nur einmal und zwar in ac_global.pas -- das erkennt auch mein liebes Delphi mit einem STRG-Klick auf die Variable im Frame. Fehler entdeckt - UpdateFrame sollte man schon in OnShow tun, denn die SplashForm hatte ich nach der MainForm created. :wall: :wall: :roll:

Trotzdem Danke,
Hannes.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 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