Einzelnen Beitrag anzeigen

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