Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: dfm resource in EXE zur laufzeit speichern->schreibge

  Alt 9. Nov 2003, 22:46
Zitat:
[...] das führt zu einer reihe von schwierigkeiten[...]
Arbeite nicht direkt auf der dfm, die auch von Delphi verwendet wird, sondern auf einer eigenen, die zur Laufzeit optional verwendet werden kann.
Hierzu würde sich ein Konstruktur eignen, der einen Stream, in dem die Daten enthalten sind, übergeben bekommt, zB
Delphi-Quellcode:
constructor TForm1.CreateFromStream(AOwner: TComponent; ADFMStream: TStream);
begin
  //...
  LoadCompoFromStream(Self, ADFMStream);
  //...
end;
im Konstructor Create(AOwner: TComponent) könntest Du dann prüfen, ob die optionale dfm-Datei existiert und einen FileStream erzeugen oder den ResourceStream, wie in der StdImplementierung. Anschließend ruft er den Konstruktor CreateFromStream auf, etwa so:
Delphi-Quellcode:
constructor TForm1.Create(AOwner: TComponent);
var
  myStream: TStream;
begin
  //create stream with dfm-data either from file or from res
  if FileExists(GetDFMFilename) then
    myStream:= TFileStream.Create(GetDFMFilename)
  else
    myStream:= //as implemented in unit Classes

  //create instance w data from stream
  try
    CreateFromStream(AOwner, myStream);
  finally
    myStream.Free;
  end;
end;
Durch diese Abstraktion wäre se später auch denkbar, mit Datenbanken statt mit Dateien zu arbeiten...

Den Unit-Dateinamen der Klasse (zB um GetDFMFilename zu implementieren) bekommst Du übrigens mithilfe der RTTI heraus (TTypeData.UnitName).

Achja, der Code und das Verfahren ist nicht von mir getestet worden.

Zitat:
Gibt es wirklich keine methode die resource in diese 'MemoryMappedFiles' zu schreiben?
Das Problem hat nicht direkt etwas mit der Zugriffstechnik zu tun. Ich wollte nur aufzeigen, warum Windows ein Handle auf der Datei hält und deshalb keinen Schreibzugriff gewährt.
gruß, choose
  Mit Zitat antworten Zitat