Delphi-PRAXiS
Seite 2 von 3     12 3      

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 13:40

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

Zitat von Darlo (Beitrag 1327019)
Habe probiert das Form automatisch erzeugen zu lassen. Da funktioniert das
Delphi-Quellcode:
Application.FindComponent('frmContentMantel')
auch nicht.

Dann dürfte doch das ARC keinen Einfluss haben, oder?

Uwe Raabe 14. Jan 2016 14:22

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

Zitat von Darlo (Beitrag 1327012)
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;

Du sollst RealCreateForm gar nicht aufrufen. Es hat schließlich einen Grund, warum das je nach OS an anderen Stellen passiert. Warum hälst du dich nicht einfach an die Vorgabe, die in der Doku beschrieben ist und auf die schon merhfach hingewiesen wurde?

Mavarik 14. Jan 2016 14:23

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

Zitat von Uwe Raabe (Beitrag 1327033)

Du sollst RealCreateForm gar nicht aufrufen. Es hat schließlich einen Grund, warum das je nach OS an anderen Stellen passiert. Warum hälst du dich nicht einfach an die Vorgabe, die in der Doku beschrieben ist und auf die schon merhfach hingewiesen wurde?

Eben WOFÜR auch...

Delphi-Quellcode:
Foo := TFoo.Create(NIL);
Foo := TFoo.Create(Application);
und gut ist...

Warum überhaupt ein Find?

Darlo 14. Jan 2016 14:52

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Muss mir wohl eingestehen dass hier ein Designfehler vorliegt den ich mir nicht wieder gerade basteln kann... auf alle Fälle nicht crossplatform.

Uwe Raabe 14. Jan 2016 14:59

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Du kannst die aktuell vorhandenen Forms auch über
Delphi-Quellcode:
Screen.Forms
/
Delphi-Quellcode:
Screen.FormCount
durchwandern und schauen ob du was passendes findest.

Darlo 14. Jan 2016 15:08

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Ich zeige die Forms nicht an. Ich hole mir nur Panels aus den Forms auf mein Mainform um Eingaben zu verwalten.

himitsu 14. Jan 2016 15:12

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Und warum nicht Frames?

Darlo 14. Jan 2016 15:15

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Zum Zeitpunkt der Entwicklung hatte Frames nicht den besten Ruf, geprüft hatte ich es selber nicht.

nahpets 14. Jan 2016 15:22

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

Zitat von Darlo (Beitrag 1327040)
Muss mir wohl eingestehen dass hier ein Designfehler vorliegt den ich mir nicht wieder gerade basteln kann... auf alle Fälle nicht crossplatform.

Wo liegt hier der Designfehler?
In Deiner Form, Formulare zu erstellen?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
    f : TForm2;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(f) then begin
    f := TForm2.Create(Application);
    f.Name := 'Hugo';
  end;
  f.Show;
  // oder mach sonstwas mit dem Formular, ohne es anzuzeigen.
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(f) then f.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
          k : TComponent;
begin
  k := Application.FindComponent('Hugo');
  if Assigned(k) then begin
    if k is TForm2 then begin
      TForm2(k).Show;
// oder sonstwas, es muss nicht zwingend angezeigt werden, um damit zu arbeiten.
    end
  end;
end;

end.
Hiermit kann man ein Formular erstellen, soweit es noch nicht existiert.

Wenn es existiert, kann man es freigeben.

Man kann es über Application.FindComponent finden und damit arbeiten.

Was funktioniert nicht bzw. wo ist der Designfehler?

Uwes Vorschlag funktioniert, unabhängig davon, ob die Formulare angezeigt werden oder nicht.
Das Vorhandensein von Formularen hat nichts mit der Sichtbarkeit auf dem Bildschirm zu tuen.

Wie "holst" Du denn die Panels (oder was auch immer) auf "Dein" Formular? Änderst Du dann den Parent?

War passiert eigentlich dann mit diesen Teilen, wenn Du Dein Formular schließt?
Oder wenn eines der Formulare, von denen Du sie holst, freigegeben wird?

Die Verwendung von Frames dürfte da deutlich besser sein und auch wohl eher designkonform.

Designfehler liegen nicht vor, wenn man etwas nicht designkonform nutzt, man sollte hier die Form der Nutzung lieber designkonform gestalten.

Bei mir funktionieren Frames seit ca. 20 Jahren unter Delphi problemlos, wie alt ist denn das Design der von Dir gewarteten Software?

himitsu 14. Jan 2016 15:25

AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
 
Warum FindComponent, wenn man
Delphi-Quellcode:
f
hat?

Zitat:

Zitat von Du
Delphi-Quellcode:
if Assigned(f) then f.Free;

Schau mal was TObject.Free macht. :-D
Zitat:

Zitat von Delphi
Delphi-Quellcode:
procedure TObject.Free;
begin
  if Self <> nil then // if Assigned(Self) then
    Destroy;
end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz