怎么判断一个控件是否有某个属性?(200分)

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我想知道一个Form上哪些控件有Caption属性,有没有办法知道?
 
你要作什吗?
 
呵呵,保存Caption,可以用这种方法来更换界面啊。
 
呵呵,有办法,学名rtti,欲知后事如何且听下回分解
 
hubdog:快点出下回啊!
 
uses typinfo;

var
p:PPropInfo;
begin
p:=GetPropInfo(Memo1.ClassInfo,'Caption');
if p=nil then showmessage('No Caption')
else ShowMessage('Caption');
p:=GetPropInfo(Button1.ClassInfo,'Caption');
if p=nil then showmessage('No Caption')
else ShowMessage('Caption');
end;
 
DreamTiger:
你要将typinfo.pas拷贝到你的工程文件的目录。我已经测试通过!
 
那我怎么才能得到这个Caption的值呢?
 
var
p:PPropInfo;
begin
p:=GetPropInfo(Button1.ClassInfo,'Caption');
ShowMessage(GetStrProp(Button1,p));
end;
 
设置属性:

var
p:PPropInfo;
sCap:string;
begin
p:=GetPropInfo(Button1.ClassInfo,'Caption');
sCap:='Shenqw@cmmail.com';
SetStrProp(Button1,p,sCap);
end;
 
hehe,给分吧

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,TypInfo;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
ppi:PPropInfo;
pProps:PPropList;
pti:PTypeInfo;
ptd:PTypeData;
PropInfo:PPropInfo;
begin
for I:=0 to Self.ComponentCount-1 do
begin
PropInfo:=GetPropInfo(Components.classinfo,'Caption');
if PropInfo<>nil then
ShowMessage(Components.Name+' has Caption property')
else
ShowMessage(Components.Name+' has not Caption property');
end;
end;

end.
 
wuwu~~,沈前卫,你好快啊,没看到,hehe
 
HeHe,我150分,你50分.DreamTiger。快给分.....
 
非常感谢二位,给了hubdog一点苦劳分,呵呵,沈兄不会见怪吧。
 
呵呵,世上的事就那么凑巧,我发分的时候还没看到沈兄的文章,结果却完全一样。
 
DreamTiger:
你还没发分呢!你没点"接收答案"....
 
呵呵,真是抱歉,一激动,忘了。
 
后退
顶部