Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DFM Datei zur Laufzeit laden. (https://www.delphipraxis.net/131917-dfm-datei-zur-laufzeit-laden.html)

QuickAndDirty 2. Apr 2009 17:34


DFM Datei zur Laufzeit laden.
 
Hallo,
zur Zeit verwenden wir ein eigenes (rudimentäres) Modul zum Laden und Speichern des Aufbaus und der Einstellungen eines
individuell gestaltbaren Formulars...selbst das bisschen was es leistet hat ne menge Arbeit verschlungen.

Jetzt kam mir die Idee: Es müsste doch möglich sein dfm Dateien zur Laufzeit, wenn vorhanden, zu laden. So das jedes Formular im Programm im Nachhinein sehr weit customized werden kann.

Das heißt ich würde wenn ein Kunde es wünscht eine Kopie der Auslieferungsversion der DFM Datei mit Delphi ändern
, speichern und diese dann bereitstellen.
So das das Formular, aus dieser externen , evtl. gezipten DFM Datei geladen werden würde.

Ist das grundsätzlich möglich ? Oder habe ich da einen fiesen Denkfehler drin.

Welche Funktion lädt die DFM Dateien? Ees ist ein TReader soweit ich weiß, ist der im OnCreate der Formulare bereits verfügbar?

Panthrax 2. Apr 2009 17:47

Re: DFM Datei zur Laufzeit laden.
 
Die DFM-Datei ist ein Abbild einer Klasse, die das Programm zur Kompilierzeit bereits kennt bzw. kennen muss. Z.B.:
Delphi-Quellcode:
object Form1: TForm1
  Caption = 'Formular 1'
  ...
  object Label1: TLabel
    Caption = 'Label 1'
    ...
  end
end
Die Eigenschaften können also geändert werden, z.B. die Beschriftung. Dem Programm unbekannte Klassen zu verwenden führt zum Fehler.

Siehe auch: Delphi-Referenz durchsuchenTReader.ReadComponent, Delphi-Referenz durchsuchenObjectTextToBinary.

QuickAndDirty 2. Apr 2009 17:52

Re: DFM Datei zur Laufzeit laden.
 
JA schon klar,
Ich meine eher Veränderungen in Größe ,Position ,Schriftart, Farbe, Style, Ausrichtung etc.
Müste doch eigentlich möglich sein auf die Komfortable IDE als Formulardesigener zurrückgreifen zu können
die Formulare aber aus einer nicht einkomplierten Rescource zu laden.

Bernhard Geyer 2. Apr 2009 18:02

Re: DFM Datei zur Laufzeit laden.
 
Zitat:

Zitat von QuickAndDirty
Müste doch eigentlich möglich sein auf die Komfortable IDE als Formulardesigener zurrückgreifen zu können

Ist von Codegear nicht vorgesehen und nicht gewünscht. Der DFM-Editor ist fest mit der IDE verknüpft und entsprechende Packages können nicht in eigenen Anwendungen verwendet werden. Aber diverse Komponentensammlungen haben z.B. den Objekt Inspector schon nachimplementiert.

Jürgen Thomas 2. Apr 2009 18:03

Re: DFM Datei zur Laufzeit laden.
 
Es geht wirklich, die dfm-Datei zur Laufzeit einzulesen; vor "vielen" Jahren hatte ich das zumindest teilweise realisiert. Aber ich weiß nicht mehr, wo und wonach ich in meinen alten Quellen suchen müsste. Ich schreibe das hier nur, um deutlich zu machen: Es lohnt sich, intensiv die Suche zu benutzen nach möglichst vielen verschiedenen Begriffen; du solltest Erfolg haben.

Jürgen

Panthrax 2. Apr 2009 18:08

Re: DFM Datei zur Laufzeit laden.
 
Zitat:

Zitat von QuickAndDirty
Ich meine eher Veränderungen in Größe ,Position ,Schriftart, Farbe, Style, Ausrichtung etc.

Das sollte gehen. In der DFM-Datei nachsehen, ob drin steht, was geändert werden soll.

Eine Sache fällt mir noch ein, über die man stolpern könnte: Der Name der Komponente. Mann kann quasi nicht zwei Formulare aus einer DFM-Datei erzeugen ohne den Namen gleichnamiger, bestehender Komponenten vorher zu ändern.

Zitat:

Zitat von Bernhard Geyer
Ist von Codegear nicht vorgesehen und nicht gewünscht.

Aha. Aber warum sollte der Programmierer sein Programm für den Kunden nicht ändern dürfen?

himitsu 2. Apr 2009 18:35

Re: DFM Datei zur Laufzeit laden.
 
Zitat:

Aha. Aber warum sollte der Programmierer sein Programm für den Kunden nicht ändern dürfen?
kann er doch ... er braucht es nur neu zu kompilieren :zwinker:

also falls es nicht umbedingt die DFM sein muß, sondern ein anderes Format ... Stichwort Serialisierung (in meiner XML-Klasse hab ich grad die Form serialisiert ... wenn man dann bei der Deserialsierung die enthaltenen Klassen zur Verfügung stellt, wäre ein laden einer Form daraus schon möglich)

QuickAndDirty 2. Apr 2009 21:23

Re: DFM Datei zur Laufzeit laden.
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von QuickAndDirty
Müste doch eigentlich möglich sein auf die Komfortable IDE als Formulardesigener zurrückgreifen zu können

Ist von Codegear nicht vorgesehen und nicht gewünscht. Der DFM-Editor ist fest mit der IDE verknüpft und entsprechende Packages können nicht in eigenen Anwendungen verwendet werden. Aber diverse Komponentensammlungen haben z.B. den Objekt Inspector schon nachimplementiert.

Tja, ich muss ja nur die dfm wahlweise aus der rescource oder von Extern lesen können.
Dann kann ich mir mit der IDE etliche DFMs bauen und die als TEXT oder Zip files ausliefern und so das Programm nachtröglich
customizen.

muss nur beim laden des Formulars im create geprüft werden ob eine customize.dfm in den entsprechenden verzeichnis vorliegt, wenn ja dann muss eben diese verwendet werden, ansonsten die einkompolierte Ressource.

mkinzler 2. Apr 2009 21:29

Re: DFM Datei zur Laufzeit laden.
 
Schau dir mal DFM-Edit von _frank_ an


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 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