首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么读取一个DFM文件并且生成预览画面

2012-02-29 
如何读取一个DFM文件并且生成预览画面?我看到一个工具,DFMEditor做到了,有谁知道是怎么做到的?非得自己创

如何读取一个DFM文件并且生成预览画面?
我看到一个工具,DFMEditor做到了,有谁知道是怎么做到的?
非得自己创建一个个的控件吗?

[解决办法]
unit Unit16;

interface

uses
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.


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


___________________________
不好意思,上传错了,现在放上去了.dfmedit_0.3.0.0_src.zip.这个是前几天从sourceforge上下载的最新版,不会是非常老的吧?

热点排行