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.