CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何实现在程序运行期间创建一个控件,并从.ini文件中配置此控件的类型及其他参数

楼主xiufengy(石破天)2003-09-04 13:34:23 在 Delphi / VCL组件开发及应用 提问

如何实现在程序运行期间创建一个控件,并从.ini文件中配置此控件的类型及其他参数  
  例如:我在按下Button1后,程序从.ini文件中读取数据,根据读取的数据,在界面上创建Label1,并且Label1的Caption为‘创建成功’  
  问题点数:0、回复次数:8Top

1 楼xiufengy(石破天)回复于 2003-09-04 14:03:03 得分 0

这样的代码可以实现我一部分的需求  
  Label2   :=   TLabel.create(form1);    
  Label2.parent   :=   form1;  
  Label2.Left   :=   0;    
  Label2.top   :=   0;    
  Label2.Height   :=   100;    
  Label2.width   :=   100;    
  Label2.Show;  
  因为我希望在.ini   中这样配置  
  [object]  
  object=TLabel    
  name=Label2  
  parent   =   form1  
  Left   =   0    
  top   =   0    
  Height   =   100    
  width   =   100    
  第一行为控件类型,第二行为控件名称,这是固定的。从第三行开始我所定义的参数顺序可能和程序里不一样,并且如果我在.ini中如果加入这样的2行  
          Color   =   clMedGray  
          ParentColor   =   False  
  程序中也必须将实现  
  Label2.Color   :=   clMedGray;  
  Label2.ParentColor   :=   False;  
  但这样我还得重新修改程序,那不是我希望做的。Top

2 楼vargent77(地平线)回复于 2003-09-04 14:17:26 得分 0

类似这样可以吗?  
  var  
      Ini:   TIniFile;  
  begin  
      Ini   :=   TIniFile.Create(   ChangeFileExt(   Application.ExeName,   '.INI'   )   );  
      try  
          Top           :=     Ini.ReadInteger(   'Form',   'Top',   100   );  
          Left         :=     Ini.ReadInteger(   'Form',   'Left',   100   );  
          Width       :=     Ini.ReadInteger(   'Form',   'Width',   500   );  
          Height     :=     Ini.ReadInteger(   'Form',   'Height',   300   );  
          Caption   :=     Ini.ReadString(   'Form',   'Caption',   你的form   );  
          Color:=     Ini.ReadString(   'Form',   'Caption',   clMedGray   );Top

3 楼xiufengy(石破天)回复于 2003-09-04 14:19:04 得分 0

其实我的想法很简单,delphi或cbc中当我们在from上添加一个控件时,form文件中就会添加  
      object   Label1:   TLabel  
          Left   =   152  
          Top   =   152  
          Width   =   32  
          Height   =   13  
          Caption   =   'Label1'  
  这样的内容,如果我们在对象观察器里修改Color为clMedGray,form文件中就会添加  
  这样的内容          
          Color   =   clMedGray  
          ParentColor   =   False  
      (备注:要把clMedGray存成整数,通过ini的readinteger读)  
  我只是想把这种对控件的创建和修改由我自己实现,这样当程序编译成exe后,我还可以添加和修改他Top

4 楼xiufengy(石破天)回复于 2003-09-04 14:19:52 得分 0

其实我的想法很简单,delphi或cbc中当我们在from上添加一个控件时,form文件中就会添加  
      object   Label1:   TLabel  
          Left   =   152  
          Top   =   152  
          Width   =   32  
          Height   =   13  
          Caption   =   'Label1'  
  这样的内容,如果我们在对象观察器里修改Color为clMedGray,form文件中就会添加  
  这样的内容          
          Color   =   clMedGray  
          ParentColor   =   False  
      (备注:要把clMedGray存成整数,通过ini的readinteger读)  
  我只是想把这种对控件的创建和修改由我自己实现,这样当程序编译成exe后,我还可以添加和修改他Top

5 楼xiufengy(石破天)回复于 2003-09-04 14:24:21 得分 0

to:   vargent77(地平线)    
  谢谢您的关注,您的方法有一定的道理,不过那会将label的所有属性写一遍啊,换成其他控件还要再写一遍。Top

6 楼z_hongbao()回复于 2003-09-04 14:44:27 得分 0

参考Infopower   4000中  
  TwwDBGrid  
      TwwIniAttributes   =   class(TPersistent)  
      private  
            FFormName:string;  
            FFileName,   FSectionName,   FDelimiter:   string;  
            FEnabled:Boolean;  
            FSaveToRegistry   :   Boolean;  
            FCheckNewFields:   boolean;  
            procedure   SetFileName(val:   string);  
            procedure   SetSectionName(val:   string);  
            procedure   SetDelimiter(val:   string);  
            procedure   SetEnabled(val:   boolean);  
            function   GetSectionName   :   string;  
            function   GetFileName   :   string;  
      public  
            Owner:   TComponent;  
            property   FormName:string   read   FFormName;  
      published  
            property   Enabled:   boolean   read   FEnabled   write   SetEnabled   default   False;  
            property   SaveToRegistry:   boolean   read   FSaveToRegistry   write   FSaveToRegistry   default   False;  
            property   FileName:   string   read   GetFileName   write   SetFileName;  
            property   SectionName:   string   read   GetSectionName   write   SetSectionName;  
            property   Delimiter:   string   read   FDelimiter   write   SetDelimiter;  
            property   CheckNewFields:   boolean   read   FCheckNewFields   write   FCheckNewFields   default   false;  
      end;  
  Top

7 楼xiufengy(石破天)回复于 2003-09-04 16:13:53 得分 0

我在abc中找到了fromsaver,不过他只能保存from的参数,不能保存from上控件的参数  
  z_hongbao()   的方法我还没试。谢谢z_hongbao()Top

8 楼xiufengy(石破天)回复于 2003-09-04 16:20:21 得分 0

z_hongbao()   你的方法跟我的要求一致么,还是我看不懂,请解释一下好么?谢谢Top

9 楼xiufengy(石破天)回复于 2003-09-04 17:51:18 得分 0

upTop

相关问题

  • 参数配置
  • 关于参数配置
  • 关于参数配置(2)
  • 一个网页控件参数问题
  • 用户控件参数问题
  • 一个控件传参数的问题
  • 用户控件的参数问题
  • ascx控件怎么传参数呢?
  • 关于SPCOMM控件参数的设置.
  • help 控件怎么作为参数??

关键词

  • 控件
  • 文件
  • 修改
  • 内容
  • clmedgray
  • ini
  • readinteger
  • 程序
  • 添加
  • 创建

得分解答快速导航

  • 帖主:xiufengy

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo