Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden (https://www.delphipraxis.net/187911-form-zur-laufzeit-erzeugen-und-mit-assigned-pruefen-ob-vorhanden.html)

Darlo 14. Jan 2016 11:56

Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Hallo zusammen,

ich erzeuge mit folgenden Code Formulare
Delphi-Quellcode:
if not assigned(frmContentMantel) then
  Application.CreateForm(TfrmContentMantel, frmContentMantel);
Jetzt möchte ich an einer anderen Stelle überprüfen ob das das Formular erzeugt ist. Das mache ich so
Delphi-Quellcode:
if not assigned(Application.FindComponent(formListe[n]) as TForm) then
begin
  continue;
end;
Das komische ist, das funktioniert unter Windows und OS X wunderbar. Nur unter iOS wird das
Delphi-Quellcode:
continue;
ausgeführt.

Kann mir jemand helfen?

Gruß
Philip

Uwe Raabe 14. Jan 2016 12:22

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Vermutlich wurde RealCreateForms noch nicht aufgerufen. Bei Windows und OSX passiert das direkt beim Application.Run, aber unter iOS und Android kommt das erst später. Solange diese Methode nicht aufgerufen wurde, erzeugt Application.CreateForm die Instanzen nicht wirklich.

himitsu 14. Jan 2016 12:29

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Warum benutzt du Application.CreateForm?

Ich würde das niemals für dynamische Forms benutzen.
Und was passiert wohl, wenn Embarcadero mal auf die Idee kommt diesen Forms z.B. einen anderen Owner verpasst? :roll:

[edit]
Zitat:

Zitat von Uwe Raabe (Beitrag 1327001)

Hey, da gibt es sogar einen passenden letzten Absatz dort. :angle:

Darlo 14. Jan 2016 12:48

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Hmm,
TApplication.CreateForm

himitsu 14. Jan 2016 12:55

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Wieso "Hmmm?" ?

Ach dort steht "Tipp: CreateForm erstellt das angegebene Formular nicht sofort." .

Darlo 14. Jan 2016 13:06

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Verstehe noch nicht warum man Application.CreateForm nicht nehmen sollte.
Folgender Code ändert leider auch nix an dem Problem...
Delphi-Quellcode:
if not assigned(frmContentMantel) then
      begin
        Application.CreateForm(TfrmContentMantel, frmContentMantel);
        //frmContentMantel := TfrmContentMantel.Create(Application);
        Application.RealCreateForms;
      end;

Mavarik 14. Jan 2016 13:16

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Zitat:

Zitat von Darlo (Beitrag 1327012)
Verstehe noch nicht warum man Application.CreateForm nicht nehmen sollte.
Folgender Code ändert leider auch nix an dem Problem...
Delphi-Quellcode:
if not assigned(frmContentMantel) then
      begin
        Application.CreateForm(TfrmContentMantel, frmContentMantel);
        //frmContentMantel := TfrmContentMantel.Create(Application);
        Application.RealCreateForms;
      end;

frmContentMantel? Wo ist das definiert? Lokal? -> ARC!

bra 14. Jan 2016 13:18

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
In der Hilfe von http://docwiki.embarcadero.com/Libra...ealCreateForms steht:
Um zur Laufzeit weitere Formulare zu erstellen, verwenden Sie FMX.Forms.TForm.Create, FMX.Forms3D.TForm3D.Create oder TForm1.Create.

Darlo 14. Jan 2016 13:20

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Delphi-Quellcode:
implementation
uses
  contentMantel{frmContentMantel};
Habe probiert das Form automatisch erzeugen zu lassen. Da funktioniert das
Delphi-Quellcode:
Application.FindComponent('frmContentMantel')
auch nicht.

bra 14. Jan 2016 13:23

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Wie Maverik schon schrieb. Wenn das Form lokal erzeugt wird und du dann von einer anderen Stelle versuchst darauf zuzugreifen, ist es von ARC möglicherweise schon wieder zerstört worden. Darum wird es mit FindComponent auch nicht gefunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 Uhr.
Seite 1 von 3  1 23      

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