我想作一个程序,一个主窗口,若干个子窗口。主窗口设置一菜单,通过菜单来调用我事先设计好的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;
我是新手,拜托。。

解决方案 »

  1.   

    Application.createform(TForm,childform);
    childform.show
      

  2.   

    你非要用动态的话,参考一下InternalReadComponentRes函数
      

  3.   

    还有就是TStream类中的一些读写组件的方法
      

  4.   

    The FileName parameter is the name of the compiled resource file that contains the component resource
    最后,资源文件名必须是Res格式,编译好的资源名,估计你用的是DFM的文件,如果你要读DFM的,你就得用TStream了,而且要设置好为非二进制的
      

  5.   

    我已经知道是怎么回事了。提这个问题的时候,我是一头雾水,解决不了几乎丧失信心。大概有一个多星期没有弄这方面的东西。不知道怎么突然有一天,我竟然知道怎么弄了,一切顺利,你说怪不怪。动态读取DFM文件及赋予动态事件是可行的。
    其中动态读取DFM中的DFM必须用writeComponentResFile函数加以保存,否则会出现“无效的流格式”。其次必须用registerclass注册DFM中的组件,否则出现“类XX不存在”:再次,如果出现“无效的属性”之类的话,应该是DFM文件中关于属性的描写读不出来,可以找到后删去。
    至于动态赋予事件,可以用form.compment[i]来循环查找FORM上的控件,找到后可以赋予了。
      

  6.   

    楼主能把你做的这个读取和保存dfm窗体的源程序代码公布一下么,小弟最近也在学习这个,一直苦于找不到合适的资料。
      

  7.   

    http://www.delphibbs.com/keylife/iblog_show.asp?xid=19453
      

  8.   

    To sdzeng(大头鸟) 
    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,这样形成一个模块,可以在其他程序里直接调用.