AGB  ·  Datenschutz  ·  Impressum  







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

Prüfen, ob Formular existiert

Ein Thema von MLurie · begonnen am 19. Apr 2020 · letzter Beitrag vom 20. Apr 2020
Antwort Antwort
MLurie

Registriert seit: 6. Sep 2004
Ort: Basel
10 Beiträge
 
#1

Prüfen, ob Formular existiert

  Alt 19. Apr 2020, 19:15
Hi an alle

Eine Frage zu meiner Android app. Ich habe folgende Funktion:

procedure TMainFreeF.MenuEgoF1EEditClick(Sender: TObject);
var
Profil: TProfilF;
begin
if not Assigned(Profil) then
Profil := TProfilF.Create(self);
Profil.Show;
end;

Ich garantiere jedem, dass Profil nicht existiert. Dennoch gibt Assigned(Profil) true zurück, überspringt das Create und wirft nen Fehler beim Show aus. Hab ich was übersehen ?
Der Objekt-Inspector zeigt übrigens auch "kein zugewiesener Wert" bei Profil an.

Danke im voraus
Michael
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Prüfen, ob Formular existiert

  Alt 19. Apr 2020, 19:35
Es sollte eine Warnung kommen, dass die Variable Profil nicht initialisiert ist. Darum steht da ein quasi zufälliger Wert drin und der ist eben nicht unbedingt 0.

Weise in der ersten Zeile einmal nil zu (also vor dem if assigned).
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Prüfen, ob Formular existiert

  Alt 19. Apr 2020, 20:12
Es gibt in Delphi nur wenige Fälle, in der nicht initialisierte Variablen einen bestimmten Wert haben, z.B. zusammengesetzte lokale Variablen (z.B. Strings; Result bzw. der Funktionsname ist keine lokale Variable sondern ein impliziter out-Parameter und immer „zufällig“) sowie alle Klassenfelder.
himitsu wird uns sicher eine ausführliche Liste liefern können.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Prüfen, ob Formular existiert

  Alt 19. Apr 2020, 21:56
himitsu wird uns sicher eine ausführliche Liste liefern können.
Das ist ja auch dokumentiert, z.B. hier:
http://docwiki.embarcadero.com/RADSt...ables_(Delphi)
Zitat:
If you do not explicitly initialize a global variable, the compiler initializes it to 0. Object instance data (fields) are also initialized to 0. On the Wiin32 platform, the contents of a local variable are undefined until a value is assigned to them.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 05:36
Weise in der ersten Zeile einmal nil zu (also vor dem if assigned).
Wobei dann die Abfrage auf Assigned auch keinen Sinn mehr macht. Insgesamt macht das ganze Konstrukt nicht viel Sinn, da es sich um eine lokale Variable handelt.

Am besten wäre es wenn man die lokale Variable in eine Feldvariable umwandelt, dann ergibt die Vorgehensweise auch wieder Sinn. Es soll ja scheinbar verhindert werden, dass das Formular mehrmals mit ".Show" angezeigt wird.
Ralf Kaiser
  Mit Zitat antworten Zitat
MLurie

Registriert seit: 6. Sep 2004
Ort: Basel
10 Beiträge
 
#6

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 05:56
Herzlichen Dank für den Input.

Was bitte ist eine Feldvariable ?

Ich habe eine Android Anwendung mit ziemlich vielen Formularen. Irgendwo stand, dass es keinen Sinn mach diese zu .free'en. Dazu scheint nicht klar zu sein, ob man OnClose (cafree), DisposeOf, Free oder FreeAndNil der korrekte Weg ist.

Also muss ich prüfen, ob das Formular bereits existiert. nil setzen macht tatsächlich keinen Sinn, da kenne ich ja den Status im voraus.

Wenn jemand den "korrekten" Weg mir aufzeigen könnte ? Mir ist es Wurscht, ob ich die Formulare jeweils erstelle und dan leere oder ob ich auf bereits erstellte Formulare prüfen muss.

Danke im voraus
Michael
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 06:09
Hallo,
Ist es denn pro Formular immer nur eine Instanz, die offen ist?
Dann könntest du eine globale Formularvariable nutzen, und nicht wie in deinem Bsp eine lokale Variable.
Heiko

Geändert von hoika (20. Apr 2020 um 07:29 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 08:27
Herzlichen Dank für den Input.

Was bitte ist eine Feldvariable ?
Ein Feld ist eine in einer Klasse deklarierte Variable. Achtung, eine in einer Klasse deklarierte class var ist kein Feld.

Delphi erstellt automatisch für jedes Formular eine globale Variable. Die sollte man für Formulare (und kaum was anderes!) auch nutzen, so wie hoika schrieb. Globalen Variablen kann man bei der Deklaration bereits initialisieren.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 10:48
Delphi erstellt automatisch für jedes Formular eine globale Variable.
Nur für die automatisch erstellten Fenster wird sie automatisch gefüllt. (und man kann diese Variable auch wegmachen)
Aber da in Screens auch eine Liste aller Delphi-Forms existiert, kann man dort auch problemlos nach einer bestimmten Form (Name oder Typ) suchen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MLurie

Registriert seit: 6. Sep 2004
Ort: Basel
10 Beiträge
 
#10

AW: Prüfen, ob Formular existiert

  Alt 20. Apr 2020, 11:29
Danke an alle für den wertvollen Input. Ich habe es nun dahin gelöst, dass ich die Variablen im Hauptformular deklariere und nil setze. Ist ein wenig umständlich, weil ich jetzt überall die Formular via das Mainform referenzieren muss, aber es läuft.

In diesem Sinne, schliesse ich den Thread und nochmals Dank an alle.

Michael
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:17 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