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



