Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DFM-Datei automatisch erstellen und zur Laufzeit laden? (https://www.delphipraxis.net/35156-dfm-datei-automatisch-erstellen-und-zur-laufzeit-laden.html)

Bernhard Geyer 3. Dez 2004 11:44

Re: DFM-Datei automatisch erstellen und zur Laufzeit laden?
 
Baust Du dann auch in der DLL eine eigene Verbindung mit der Datenbank auf?
Wieso denn alles in eigene DLL's auslagern. Es ist doch viel einfacher (und auch von der gesamten größer (Exe+DLL's) sparsammer alles in eine Anwendung zu halten. Damit kommst Du auch nur mit einer einzigen DB-Verbindung aus.

Es könnten verschiedene Ursachen haben:
- In jeder DLL wird eine DB-Verbingung aufgebaut (dauert auch ein paar ms)
- Die Abfragen sind supoptimal (zu große Ergebnismenge)
- ...

Falls Du ein paar € ausgeben kannst, würde ich AQTime empfehlen. Hab damit schon teilweise die Performance auf das 10-100fache erhöht, da damit sehr einfach die Performancekritischen Stellen bis auf Codezeilen gefunden werden kann.

maximov 3. Dez 2004 12:13

Re: DFM-Datei automatisch erstellen und zur Laufzeit laden?
 
Ja, AQTime is echt ganz toll. Aber um auf deine ursprüngliche frage zurück zu kommen:

Zitat:

Kann man zur Design-Zeit eine DFM-Datei automatisch erzeugen, aus der Delphi zur Laufzeit die entsprechende Form darstellt?
Du kannst in delphi jede beliebige komponente, mit unterkomponenten, streamen lassen. Das muss nicht unbedingt ein form sein. Dh. du könntest auch sagen, dass du nur den inhalt einer Tabs streamst, und in deiner DB speichert.

Das ganz geht, wie der ausdruck 'streamen' schon sagt mit einem stream. Und zwar mit jedem stream in delphi:

Delphi-Quellcode:
Stream.WriteComponent(aCompo);
...
Stream.ReadComponent(aCompo);
Ich hab das früher mal für filestreams gemacht. Da is auch noch die umwandlung in Text-DFMs mit drinne, die du evtl. weglassen könntest, oder nur zur kontrolle aktivieren. Und evtl redundante streams optimieren:

Delphi-Quellcode:
function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var Stream1:TMemoryStream;
    Stream2:TMemoryStream;
      format : TStreamOriginalFormat;
begin
  result := false;
   format := sofText;
   Stream1 := TMemoryStream.Create;
  Stream2 := TMemoryStream.Create;
   try
      Stream1.WriteComponent(aCompo);
    Stream1.Position := 0;
    if not asBinary then
    begin
      format := sofText;
      ObjectBinaryToText(Stream1,Stream2,format);
    end else Stream1.SaveToStream(Stream2);
    Stream2.SaveToFile(FileName);
    result := true;
   finally
      Stream1.Free;
      Stream2.Free;
   end;
end;


function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var FileStream:TFileStream;
    MemoryStream:TMemoryStream;
    format:TStreamOriginalFormat;
begin
  result := false;
  if not FileExists(fileName) then exit;
  MemoryStream := TMemoryStream.Create;
  FileStream := TFileStream.Create(FileName,fmOpenRead);
  try
    if not asBinary then
    begin
      format := sofBinary;
      ObjectTextToBinary(FileStream,MemoryStream,format);
    end else MemoryStream.LoadFromStream(FileStream);
    MemoryStream.Position := 0;    
    MemoryStream.ReadComponent(aCompo);
    result := true;
  finally
    FileStream.Free;
    MemoryStream.Free;
  end;
end;
Viel spass :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.
Seite 2 von 2     12   

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