求一类的写法? ( 积分: 50 )

  • 主题发起人 主题发起人 strongburn
  • 开始时间 开始时间
S

strongburn

Unregistered / Unconfirmed
GUEST, unregistred user!
我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
for i:=0 to componentcount-1 do
但需要一个类作类型转换.
(components as 转换类).caption:='内容';
窗体中的控件类型较多
我的转换类写法是
TformatClass=class(component)
private
fcaption:string;
public
published
property caption:string read fcaption write fcaption;
end;
类型转换时报错,难道AS只能用于祖先类吗?我要想对每个控件的Caption操作怎么实现?
希望各位帮忙?
 
我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
for i:=0 to componentcount-1 do
但需要一个类作类型转换.
(components as 转换类).caption:='内容';
窗体中的控件类型较多
我的转换类写法是
TformatClass=class(component)
private
fcaption:string;
public
published
property caption:string read fcaption write fcaption;
end;
类型转换时报错,难道AS只能用于祖先类吗?我要想对每个控件的Caption操作怎么实现?
希望各位帮忙?
 
if components is TControl then
(components as TControl).caption:='内容';
 
TO 楼上
Tcontrol 没有caption 呀?
 
哦,对,protected了
那你就在继承树中往下找吧
 
to 张鸿林
首先谢谢你的回答
但是有些三方控件直接从Tobject继承呀?
 
那么你就从第三方控件继承数中找
if (components is TControl ) or (components is <a object that contain TCaption field> ) or ...
then
(components as TControl).caption:='内容';


 
to 张鸿林
我理解你的意思是写成这样:
if (components is TControl ) then
(components as TControl).caption:='内容';
if (components is <a object that contain TCaption field> ) then
(components as <a object that contain TCaption field> ).caption:='内容';
if .... then
...............

界面中的控件不固定(我也不清楚要用那些控件),这样的并列IF要写多少呀?无论写多少也是固定的呀?
不知理解的对不对,请指正。
我的意思是想从Tobject继承只是增加一个Caption 属性 作为AS后面的类,不知思路是不是正确。
TformatClass=class
private
fcaption:string;
public
published
property caption:string read fcaption write fcaption;
end;
实际检验报错,应该怎么作呢?请指点。
 
简单一句话,不行
 
简单一句话,不行
什么意思?是我的思路不对?还是不太好解决。
 
建议复习一下object pascal
 
hehe,良药苦口。
 
方法如下;但不建议使用
TCapControl = class(TControl)
public
property Caption;
end;

//开始使用
for i := 0 to ComponentCount - 1 do
if Components is TControl then
TCapControl(Components).Caption := '你的内容'; //注意不能用 ... as ...

TCapControl直接派生自TControl,只公布了TControl的Caption属性,因而可以改写
其Caption属性。
之所以不建议使用,因为这是一种侵犯式写法,而且有时候没用:
Caption在TControl中定义如下:
property Caption: TCaption read GetText write SetText;
而GetText和SetText是TControl中的私有静态方法,不是虚函数,无法重载,
如果某个TControl的派生类重新定义了Caption的读、写方法,那上面的方法将无效,
后果自负
 
uses TypInfo;
.....
if IsPublishedProp(Components,'Caption') then
SetStrProp(Components,'Caption','内容')
........
当然,也有出错的时侯
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
==>我打算对在一个循环中对窗体中所有具有Caption属性的控件的Caption进行操作.
要继承就是从TWinControl吗,直接从TControl是不行的,正如OverlordBlind兄所说,具有Caption属性的控件也只有TWinControl吗?其实也没这必要吗?如果确实要有string属性可以直接用TWinControl的Hint来代替,调用前先保存起,调用后再恢复。Int属性可以用Tag。
 
后退
顶部