![]() |
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Zitat:
|
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Zitat:
|
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Zitat:
Delphi-Quellcode:
und gut ist...
Foo := TFoo.Create(NIL);
Foo := TFoo.Create(Application); Warum überhaupt ein Find? |
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.
|
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:
durchwandern und schauen ob du was passendes findest.
Screen.FormCount
|
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.
|
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Und warum nicht Frames?
|
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.
|
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Zitat:
In Deiner Form, Formulare zu erstellen?
Delphi-Quellcode:
Hiermit kann man ein Formular erstellen, soweit es noch nicht existiert.
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. 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? |
AW: Form zur Laufzeit erzeugen und mit assigned prüfen ob vorhanden
Warum FindComponent, wenn man
Delphi-Quellcode:
hat?
f
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr. |
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