我想取控件的属性列表
可是我用TypInfo单元中的GetPropList取不到DBText的Text属性
请问为什么取不到?如何才能取到?

解决方案 »

  1.   

    说实话我听不懂你在说什么
    不可以这样吗?
    var
      s:string;
      begin
      s=DBtext.text;
      end
      

  2.   

    DBText的Text属性不是published,所以不能取到————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    查看VCL源码可知,
    DBText的Text属性继承于TControl的TEXT属性,该属性放在protected关键字后,
    属于受保护部分,但开发者可以继承,
    如此,你可以从TDBText继承,然后就可以读取TEXT属性,如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB,typinfo, StdCtrls, DBCtrls;type
      TDBText1=class(TDBText) //从 TDBText继承,并公开属性 Text
      public
        property Text;
      end;
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        procedure FormCreate(Sender: TObject);
      private
      dbtext1:tdbtext1;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
     dbtext1:=tdbtext1.Create(form1);
     dbtext1.Text:='aaa';
     ....设置相应属性
     dbtext1.Show;
    end;end.
      

  4.   

    我的意思是这样,我要在运行期间判断一个控件是否具有Text属性
    但我事先不知道这个控件是什么类型的DBText的Text属性不是published,所以不能取到
    但我想知道的是如何才能取得到大侠们帮忙啊
      

  5.   

    "但我想知道的是如何才能取得到"什么意思呢?
    wdsimon(老王)的方法可以很好的解决使用取不到的属性,
    如果你只是像知道某个控件是否具有Text属性,而不管它是否是published,那你直接看它是不是TControl的子类不就行了么?
      

  6.   

    是这样的,我想做一个函数,传递进去一个未知的类,
    然后判断其是否具有Text属性,并且该属性是否为字符串型,
    如果是则返回该属性的值
    而DBText的确具有Text属性,也可以访问,但没办法判断zousoft(好心肠的肉干) 
    不一定所有继承于TControl的组件都有Text属性阿,Button,Panel等等等等
      

  7.   

    非published部分的成员没有包含在RTTI中,当然运行时不能直接接触它。你可以使用变通的办法,比如看是否有DataField和DataSource属性,如果有,则表示有Text属性。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  8.   

    lxpbuaa(桂枝香在故国晚秋)
    有DataField和DataSource两个属性的也不一定有Text属性,比如DBCheckBox