Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 31. Okt 2003, 10:54
Ich kann zwar jetzt nicht viel zu deinem edit prob sagen...nur dass du vielleicht die property 'ComponentState' missbrauchen könntest und auf 'scDesigning' setzen, dann hasst du schonmal ein flag, bzw. werden sie vielleicht auch anders gezeichnet etc.

Aber du musst die formulare ja auch speichern...da hätt ich vielleicht einen kleinen leckerbissen für dich, mit dem du deine forms als dfm-text (oder binary) speichern und laden kannst:

Delphi-Quellcode:

{ -- Author: max hub (aka maximov alias maximus) - 2003 --}

unit dmService;

interface

uses classes, sysUtils, TypInfo;


function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;


implementation



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;

end.
so kannst du dann speichern und laden:

Delphi-Quellcode:
SaveCompoToFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB.
//...
LoadCompoFromFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB.
ich hoffe das hilt dir deinen form-designer zu wuppen

cu,

maximov.

PS: Beim laden werden alle plazierten compos automatisch instanziert!
  Mit Zitat antworten Zitat