我看到一个工具,DFMEditor做到了,有谁知道是怎么做到的?
非得自己创建一个个的控件吗?

解决方案 »

  1.   

    我怎么没找到,你有吗,能不能给我一份?[email protected]急用,谢谢。
      

  2.   

    我放到这里了,自己去下吧
    http://mastersky.ys168.com/Delphi目录里,密码是Delphi
      

  3.   

    我怎么没发现源代码啊?只有一个非常老的版本的DFMEdit的exe文件,其他的都不知道是什么
      

  4.   

    unit Unit16;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure setNameEvent(Reader: TReader; Component: TComponent;
          var Name: string);
        procedure CreateComponentEvent(Reader: TReader;
          ComponentClass: TComponentClass; var Component: TComponent);
        procedure rc(Component: TComponent);
        procedure FindMethodEvent(Reader: TReader; const MethodName: string;
          var Address: Pointer; var Error: Boolean);  end;var
      Form1: TForm1;implementation{$R *.dfm}function ComponentToString(Component: TComponent): string;var
      BinStream: TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result := StrStream.DataString;
        finally
          freeandnil(StrStream);    end;
      finally
        freeandnil(BinStream)
      end;
    end;function StringToComponent(Value: string): TComponent;
    var
      StrStream: TStringStream;
      BinStream: TMemoryStream;
    begin
      StrStream := TStringStream.Create(Value);
      try
        BinStream := TMemoryStream.Create;
        try
          ObjectTextToBinary(StrStream, BinStream);
          BinStream.Seek(0, soFromBeginning);
          Result := BinStream.ReadComponent(nil);    finally
          freeandnil(BinStream);
        end;
      finally
        freeandnil(StrStream);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      r: TReader;
      dfm: string;
      c: TComponent;
      ms, ms2: TMemoryStream;
    begin
      dfm := ComponentToString(Self);
      ShowMessage(dfm);
      ms := TMemoryStream.Create;
      ms2 := TMemoryStream.Create;
      ms.Write(dfm[1], length(dfm));
      ms.Position := 0;
      ObjectTextToBinary(ms, ms2);
      ms.SaveToFile('c:\1.txt');
      ms2.Position := 0;
      r := TReader.Create(ms2, 4096);
      r.Parent := nil;
      r.Owner := nil;  r.OnSetName := setNameEvent;
      r.OnCreateComponent := CreateComponentEvent;
      r.OnFindMethod := FindMethodEvent;
      c := r.ReadRootComponent(TForm.Create(nil));
      TForm(c).Show;  TForm(c).Top := TForm1(c).Top + 30;
      TForm(c).Left := TForm1(c).Left + 30;  FreeAndNil(ms);
      FreeAndNil(ms2);
    end;procedure TForm1.setNameEvent(Reader: TReader; Component: TComponent;
      var Name: string);
    begin
    //  Memo1.Lines.Add(Name);
     // Name := Name + '_1';
    end;procedure TForm1.CreateComponentEvent(Reader: TReader;
      ComponentClass: TComponentClass; var Component: TComponent);
    begin
    //  ShowMessage(ComponentClass.ClassName);
    end;procedure TForm1.rc(Component: TComponent);
    begin
    //
    end;procedure TForm1.FindMethodEvent(Reader: TReader; const MethodName: string;
      var Address: Pointer; var Error: Boolean);
    begin
      Address := nil;
      Error := false;
    end;initialization
      RegisterClass(TForm);
      RegisterClass(TButton);
      RegisterClass(TMemo);end.
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      r: TReader;
      dfm: string;
      c: TComponent;
      ms, ms2: TMemoryStream;
    begin  ms := TMemoryStream.Create;
      ms.LoadFromFile(ExtractFilePath(Application.Name) + 'unit16.dfm');
      ms2 := TMemoryStream.Create;
      ms.Write(dfm[1], length(dfm));
      ms.Position := 0;
      ObjectTextToBinary(ms, ms2);  ms2.Position := 0;
      r := TReader.Create(ms2, 4096);
      r.Parent := nil;
      r.Owner := nil;  r.OnSetName := setNameEvent;
      r.OnCreateComponent := CreateComponentEvent;
      r.OnFindMethod := FindMethodEvent;
      c := r.ReadRootComponent(TForm.Create(nil));
      TForm(c).Show;  TForm(c).Top := TForm1(c).Top + 30;
      TForm(c).Left := TForm1(c).Left + 30;  FreeAndNil(ms);
      FreeAndNil(ms2);end;initialization
      RegisterClass(TForm);
      RegisterClass(TButton);
      RegisterClass(TMemo);end.
      

  6.   

    我怎么没发现源代码啊?只有一个非常老的版本的DFMEdit的exe文件,其他的都不知道是什么
    ___________________________
    不好意思,上传错了,现在放上去了.dfmedit_0.3.0.0_src.zip.这个是前几天从sourceforge上下载的最新版,不会是非常老的吧?
      

  7.   

    也可以去sourceforge下载.
    http://sourceforge.net/project/showfiles.php?group_id=158404
      

  8.   

    withcsharp
    不好意思,只能多给先来那位,谢谢!
      

  9.   

    有哪位高手,能写一个简单的读取和保存窗体的例子么,dfmedit_0.3.0.0_src.zip里面的太复杂了.