![]() |
Formular zur Laufzeit speichern .....
Moin Moin.
Kann man eigentlich ein Formular, in das zur Laufzeit Steuerelemente eingefügt werden, MIT diesen Steuerelementen speichern? geldis |
AW: Formular zur Laufzeit speichern .....
Ja, aber soweit ich weiß gibt es dazu keine Standardfunktion, sondern man muss es selbst programmieren.
|
AW: Formular zur Laufzeit speichern .....
Zitat:
![]() Bis bald... Thomas |
AW: Formular zur Laufzeit speichern .....
Die DFM ist ja eine Datei wie jede andere auch, da kann man halt alles reinschreiben. Aber auch in die die PAS müssen die neuen Objekte eingefügt werden. Nur bringt Dir das alles nix, wenn Du nicht zu irgendeinem Zeitpunkt das Projekt neu erzeugst. Aber alles lässt sich programmieren und automatisieren. Dürfte recht viel Fleißarbeit werden.
|
AW: Formular zur Laufzeit speichern .....
Das geht erstmal ganz einfach:
Delphi-Quellcode:
Das speichert das Form im Binärformat. Soll es stattdessen im Textformat sein ist etwas mehr notwendig:
procedure SaveFormToFileAsBinary(AForm: TForm; const AFileName: string);
begin WriteComponentResFile(AFileName, AForm); end;
Delphi-Quellcode:
Die Frage ist nur: Was willst du mit diesen Dateien anfangen?
procedure SaveFormToFileAsText(AForm: TForm; const AFileName: string);
begin var stream := TFileStream.Create(AFileName, fmCreate); try var mem := TMemoryStream.Create; try mem.WriteComponent(AForm); mem.Position := 0; ObjectBinaryToText(mem, stream); finally mem.Free; end; finally stream.Free; end; end; |
AW: Formular zur Laufzeit speichern .....
Natürlich müssen alle Komponenten, welche sich in der DFM befinden, auch bekannt sein, bevor man die DFM wieder laden will.
![]() ![]() Normal macht Delphi das automatisch, z.B. beim Create einer Form-Klasse, indem es alle TComponent-Typen der Published-Variablen der Klasse vorher registriert und anschließend wieder deregistriert. ![]() ![]() PS: Drum knallt es auch, wenn alle "Variablen" eines Types aus der Klasse gelöscht wurden. Für statische Komponente, wie z.B. Labels, welche nie geändert und somit nie direkt im Code drauf zugegriffen wird, keine Variablen. Und alles was über FindComponent geht, dafür auch nicht. Per se wird für das Funktionieren keine Variable benötigt (TComponent-Nachfahren füllen, bei Zuweisung ihres Namens, die gleichnamige Published-Variable, in ihrem Owner ... ACHTUNG, egal welchen Typ diese Variable besitzt), aber wenn vorher kein manuelles RegisterClass vorkam, dann muß zwangsläufig mindestens eine Variable des nötigen Typs in der Klasse existieren, oder in ihren Vorfahren. Wir speichern so z.B. zur Laufzeit generierte dynamische Eingabeformulare und Datenanzeigefenster in der Datenbank. PS: Es gibt von einigen Herstellern auch Property-Inspektoren und, falls man es nicht selbst machen will, auch FormDesigner, um Komponenten mit der Maus umherschieben zu können. Ob man zum Laden das Fenster vom DFM-Reader automatisch erstellen will, oder eine bereits erstellte Instanz seines Basisformular (eigene FormKlasse) mit Komponenten aus dieser DFM befüllen will, muß man selbst entscheiden. Um einen TForm-Nachfahen erstmal ohne DFM zu erstellen, ![]() TCustomForm und TForm kann direkt mit Create erstellen werden. Nach gleichnamigen DFM-Ressourcen wird erst bei Nachfahren von TForm gesucht, für jeden einzelnen Vorfahren, bis dort hin. |
AW: Formular zur Laufzeit speichern .....
Hossa!
Danke für die Antworten. Was ich damit will? Etwas ausprobieren von dem ich auch noch nicht so recht weiß was das werden soll..... Vielendank an alle! geldis |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 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