菜鸟的难题,如何能将窗体所有属于Tlabel的Caption属性都写进配置文件 ( 积分: 100 )

  • 主题发起人 主题发起人 yjpya
  • 开始时间 开始时间
Y

yjpya

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,假如有一个窗体,窗体里面有labe1、label3、label5,abcde(它也是Tlabel类的,只是Name为Abced)。。。。。。
Label的数目不确定,而label的name也不确定,总之是属于Tlabel就可以了。假如我想写一个过程,可以将所有Label的Caption属性都写进一个配置文件,最顶层的[]为Tlabel类的类名,左边为label的name,右边为label的caption,有多少个Label就写进配置文件多少个,格式如下
[Tlabel]
label1=label1.caption
label3=label3.caption
label5=label5.caption
abcde=abcde.caption
.....................
请问有没朋友可以写出这样函数或过程,请赐教,谢谢!!!
 
for i := form1.ComponentCount - 1 downto 0 do
begin
if form1.Components is Tlabel then
XXX := form1.Components as TLbel).caption;
end;
 
procedure TfrmNewInMat.SaveLableCaption(sform: TForm);
var
i: Integer;
begin
for i := 0 to form.ControlCount -1 do
begin
if sForm.Controls.ClassType = TLabel then
begin
//执行保存的代码!
SaveToIniFile(sForm.Name, sform.Controls.Name, (sForm.Controls as TLabel).Caption)
End;
end;
End;
 
保存控件的各种属性是借助流来保存的,自己去写配置文件?呵呵

//保存控件属性
procedure TForm1.Button2Click(Sender: TObject);
var
aFileStream: TFileStream;
begin
aFileStream:= TFileStream.Create('xx.dat',fmCreate or fmOpenWrite);
try
aFileStream.WriteComponent(Self.Memo3);
finally
aFileStream.Free;
end;
end;

//通过文件载入控件属性
procedure TForm1.Button3Click(Sender: TObject);
var
aFileStream: TFileStream;
begin
aFileStream:= TFileStream.Create('xx.dat',fmOpenRead);
try
aFileStream.ReadComponent(Self.Memo3);
finally
aFileStream.Free;
end;
end;
 
首先多谢楼上各位朋友的热心回复,二楼和三楼的朋友的代码肯定是可以通过的,但是写的代码量可能相对来说要多一点,想请教一下“那年黄梅花开,”朋友,你的代码如果才能体现出效果,能否详细一点,因为朋友的代码可以用起来,就是不知道该如何体现出效果,请再次赐教,谢谢!!!

另外,假如将问题倒向操作,即读取配置文件后,自动将配置文件的内容赋值给窗体的各个控件,这又该如何实现?假如有一个窗体,窗体里面有labe1、label3、label5,abcde(它也是Tlabel类的,只是Name为Abced)。。。。。。,另外有Edit1、Edit2、kkkedit(它也是Tedit类的,只是它的Name为kkkedit),然后配置文件如下,如何读取配置文件,才能将配置文件里面对应Caption赋给对应的控件呢?例如首先读取Tlabel,然后读取label1=。。。,然后读取到右边的值后,就将右边的值赋给窗体属于Tlabel类的label1,并且将它的Caption赋值为配置文件的值,即label1.caption,读取Tedit与Tlabel的类似,请问这样可以实现吗?如果可以的话请各位朋友给一个小例子,请各位朋友赐教,多谢!!!

配置文件如下:

[Tlabel]
label1=label1.caption
label3=label3.caption
label5=label5.caption
abcde=abcde.caption
.....................
[Tedit]
edit1=edit1.caption
edit2=edit2.caption
kkkedit=kkkedit.caption
..........



热切希望楼上的各位大虾可以继续跟进小弟的贴子,谢谢!!!!
 
USES inifiles;
//在窗体初始化时读取设定好的ini文件
FUNCTION getlabel(Aform: tform; filename: STRING): boolean;
VAR
i : integer;
BEGIN
WITH Tinifile.Create(filename) DO
TRY
TRY
WITH Aform DO
FOR i := 0 TO ComponentCount - 1 DO
IF (Components IS tlabel) THEN
tlabel(Components).Caption := readstring(ClassName,
tlabel(Components).ClassName, '');
result := true;
EXCEPT
result := false;
END;
FINALLY
free;
END;
END;
//在窗体初始化时用这个生成INI文件 ,做一次就行了
FUNCTION setlabel(Aform: tform; filename: STRING): boolean;
VAR
i : integer;
BEGIN
WITH Tinifile.Create(filename) DO
TRY
TRY
WITH Aform DO
FOR i := 0 TO ComponentCount - 1 DO
IF (Components IS tlabel) THEN
writestring(ClassName,
tlabel(Components).ClassName,
tlabel(Components).Caption);
result := true;
EXCEPT
result := false;
END;
FINALLY
free;
END;
END;
这个有多难?放到一个公用UNIT里去,其它窗体调用就行了
 
楼上的朋友,多谢您的热心回复,你的代码肯定是可以通过的,只不过代码量稍为多,因为整个工程文件,不单单只有Tlabel类的,另外,希望“那年黄梅花开”朋友可以再赐教!因为对朋友的代码感到疑问,如果真的可以用起来的话,那就节省了很多的代码量,谢谢!
 
后退
顶部