我想作一个程序,一个主窗口,若干个子窗口。主窗口设置一菜单,通过菜单来调用我事先设计好的DFM窗体文件(假设其中只有一些常用控件),并以子窗口的形式显示出来,我该如何作呢?我用ReadComponentResFile这个函数试了好久,每次都是报告“无效的流格式”,真是气死了。那位好心人帮帮我解决一下啊。我的部分代码:
procedure TForm1.menu1Click(Sender: TObject);
var
childform:TForm;
FileName:string;
begin
if OpenDialog1.Execute then
begin
Application.createform(TForm,childform);
ReadComponentResFile(OpenDialog1.FileName, childform);
end;end;
我是新手,拜托。。
procedure TForm1.menu1Click(Sender: TObject);
var
childform:TForm;
FileName:string;
begin
if OpenDialog1.Execute then
begin
Application.createform(TForm,childform);
ReadComponentResFile(OpenDialog1.FileName, childform);
end;end;
我是新手,拜托。。
childform.show
最后,资源文件名必须是Res格式,编译好的资源名,估计你用的是DFM的文件,如果你要读DFM的,你就得用TStream了,而且要设置好为非二进制的
其中动态读取DFM中的DFM必须用writeComponentResFile函数加以保存,否则会出现“无效的流格式”。其次必须用registerclass注册DFM中的组件,否则出现“类XX不存在”:再次,如果出现“无效的属性”之类的话,应该是DFM文件中关于属性的描写读不出来,可以找到后删去。
至于动态赋予事件,可以用form.compment[i]来循环查找FORM上的控件,找到后可以赋予了。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19453 这段代码太长了,作者虽然写的很详细,但是让人看了更是摸不着头脑.
现在我的程序中已经实现了对动态加入控件的RegisterClass, 仅仅需要在主窗体中调用两个函数,来实现对子窗体或其他窗体的读取和保存. 我在一个Delphi程序中看到有这么一段,
uses SAVEFRMprocedure TForm1.Button6Click (Sender: TObject);
begin
if SaveDialog1.Execute then
SaveToDFM (Form2, SaveDialog1.FileName, dfmBinary);
end;procedure TForm1.Button5Click (Sender: TObject);
begin
if OpenDialog1.Execute then
begin
ClearAllObjects (Form2);
LoadFromDFM (Form2, penDialog1.FileName, dfmBinary);
end;
end;很明显SAVEFRM.pas单元里包含了SaveToDFM和LoadFromDFM两个函数.
只可惜我下载了这个程序以后不能正常运行,因为缺少SAVEFRM.pas单元.
哪位能写出来一个类似SaveToDFM和LoadFromDFM功能的函数啊,不用考虑RegisterClass,这样形成一个模块,可以在其他程序里直接调用.