AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular zur Laufzeit speichern .....

Ein Thema von geldis · begonnen am 9. Aug 2024 · letzter Beitrag vom 10. Aug 2024
Antwort Antwort
geldis

Registriert seit: 19. Jan 2022
39 Beiträge
 
#1

Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 15:35
Moin Moin.

Kann man eigentlich ein Formular, in das zur Laufzeit Steuerelemente eingefügt werden, MIT diesen Steuerelementen speichern?

geldis
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 16:38
Ja, aber soweit ich weiß gibt es dazu keine Standardfunktion, sondern man muss es selbst programmieren.
Thomas Mueller
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#3

AW: Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 16:40
Kann man eigentlich ein Formular, in das zur Laufzeit Steuerelemente eingefügt werden, MIT diesen Steuerelementen speichern?
Ja. Wenn es was kosten darf auch fertig mit DevExpress Layout Control.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#4

AW: Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 16:45
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.
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 23:27
Das geht erstmal ganz einfach:
Delphi-Quellcode:
procedure SaveFormToFileAsBinary(AForm: TForm; const AFileName: string);
begin
  WriteComponentResFile(AFileName, AForm);
end;
Das speichert das Form im Binärformat. Soll es stattdessen im Textformat sein ist etwas mehr notwendig:
Delphi-Quellcode:
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;
Die Frage ist nur: Was willst du mit diesen Dateien anfangen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Formular zur Laufzeit speichern .....

  Alt 9. Aug 2024, 23:57
Natürlich müssen alle Komponenten, welche sich in der DFM befinden, auch bekannt sein, bevor man die DFM wieder laden will.
Delphi-Referenz durchsuchenRegisterClass / Delphi-Referenz durchsuchenRegisterClasses

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.
Delphi-Referenz durchsuchenUnRegisterClass / Delphi-Referenz durchsuchenUnRegisterModuleClasses (z.B. HInstance einer BPL/DLL/EXE)

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,
Delphi-Referenz durchsuchenTCustomForm.CreateNew

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.
$2B or not $2B

Geändert von himitsu (10. Aug 2024 um 13:40 Uhr)
  Mit Zitat antworten Zitat
geldis

Registriert seit: 19. Jan 2022
39 Beiträge
 
#7

AW: Formular zur Laufzeit speichern .....

  Alt 10. Aug 2024, 08:17
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:28 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