我设计了一个窗体,窗体上有很多控件,我想能不能把Form及其他控件的属性保存到文本文件或数据表中,在运行窗体时动态加载。我看过窗体的dfm文件,他就是把表单及其各个控件的属性保存起来(不过保存的只是控件修改了的属性),我想应该可以实现。这样做的好处是,可以让用户自己修改界面或添加控件,然后将信息保存起来,运行时动态加载即可,给程序增加了极大的灵活性。
真切希望做过这方面的高手能给予指点,也愿意和大家共同研究这个问题。

解决方案 »

  1.   

    那你也用DFM文件就行了,自己解析他,也不是什么难事儿
      

  2.   

    <<參透 delphi / kylix>> 說得比較詳細, 可參考!!如果你只是想簡單的保存位置, 那就直接訪問控件的屬性, 再保存就可!看看 RTTI的相關幫助
      

  3.   

    用流保存到*.ini文件中,需要时加载就行了!
      

  4.   

    你也可以直接用Ini文件来保存,这样可以操作方便点。我曾经做过这个方面的研究,如果要源代码的话,留下email,我给你发好了。
      

  5.   

    加载?在create的时候吧?
    如果把这个东西做好了,是不是就是一个解释器拉?
    那就太强拉。有这么多控件呢!
      

  6.   

    只记录简单的位置的话 Ehlib提供了一个空间可以做到。
      

  7.   

    procedure SaveToFile(FileName:string);
    var S: TStream;
    begin
      S := TFileStream.Create(Filename, fmCreate);
      try
        Stream.WriteComponent(yourComponent);
      finally
        S.Free;
      end;
    end;
      

  8.   

    //保存
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
      Stream: TStream;
    begin
    Stream := TFileStream.Create('d:\1.cmm', fmCreate);
    for i:=0 to self.ComponentCount-1 do
      Stream.WriteComponent(self.Components[i]);
    Stream.Free;
    end;//调用
    procedure TForm1.Button2Click(Sender: TObject);
    var Stream: TFileStream;
        i:integer;
    begin
        Stream:= TFileStream.Create('d:\1.cmm', fmOpenRead);
        Stream.Position:=0;
        for i:=0 to self.ComponentCount-1 do
        Stream.ReadComponent(self.Components[i]);
        Stream.Free;
    end;
    经过测试没问题!
      

  9.   

    加载的时候在FORM的ONSHOW中读INI文件加载各属性
      

  10.   

    太好,十分感谢各位的回复。
    我的Email: [email protected]
               [email protected]