AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Darlo · begonnen am 14. Jan 2016 · letzter Beitrag vom 14. Jan 2016
Antwort Antwort
Seite 2 von 3     12 3      
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#11

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

  Alt 14. Jan 2016, 13:40
Habe probiert das Form automatisch erzeugen zu lassen. Da funktioniert das Application.FindComponent('frmContentMantel') auch nicht.
Dann dürfte doch das ARC keinen Einfluss haben, oder?
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 14. Jan 2016, 14:22
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#13

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

  Alt 14. Jan 2016, 14:23

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?
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#14

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

  Alt 14. Jan 2016, 14:52
Muss mir wohl eingestehen dass hier ein Designfehler vorliegt den ich mir nicht wieder gerade basteln kann... auf alle Fälle nicht crossplatform.
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 14. Jan 2016, 14:59
Du kannst die aktuell vorhandenen Forms auch über Screen.Forms /Screen.FormCount durchwandern und schauen ob du was passendes findest.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#16

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

  Alt 14. Jan 2016, 15:08
Ich zeige die Forms nicht an. Ich hole mir nur Panels aus den Forms auf mein Mainform um Eingaben zu verwalten.
Philip
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 14. Jan 2016, 15:12
Und warum nicht Frames?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

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

  Alt 14. Jan 2016, 15:15
Zum Zeitpunkt der Entwicklung hatte Frames nicht den besten Ruf, geprüft hatte ich es selber nicht.
Philip
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#19

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

  Alt 14. Jan 2016, 15:22
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?

Geändert von nahpets (14. Jan 2016 um 15:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 14. Jan 2016, 15:25
Warum FindComponent, wenn man f hat?

Zitat von Du:
if Assigned(f) then f.Free;
Schau mal was TObject.Free macht.
Zitat von Delphi:
Delphi-Quellcode:
procedure TObject.Free;
begin
  if Self <> nil then // if Assigned(Self) then
    Destroy;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21: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