<li id="j64py"><acronym id="j64py"></acronym></li>

  • <em id="j64py"></em>

    <em id="j64py"><acronym id="j64py"></acronym></em>
    <dd id="j64py"></dd>
    <em id="j64py"><acronym id="j64py"><input id="j64py"></input></acronym></em>
    <rp id="j64py"><object id="j64py"><blockquote id="j64py"></blockquote></object></rp>
    <button id="j64py"><acronym id="j64py"></acronym></button>
    捐助郴維網
    感謝您對郴維網的支持,你的支持將是郴維網持續發展的動力!
    二維碼
    ×
    當前位置:郴維網 >基礎知識 > 正文
    9 2020.03

    關于類的入門例子(9): 獲取對象的 RTTI 屬性與事件的函數

    點擊次數:766 更新時間:2020-3-9 18:51:35  【打印此頁
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, xmldom, XMLIntf, XMLBrokr, msxmldom, XMLDoc;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        Memo2: TMemo;
        XMLDocument1: TXMLDocument;
        procedure Button1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses TypInfo; {獲取類的信息, 需要這個單元}
    
    
    //獲取對象的 RTTI 屬性與事件的函數
    function GetPropertyAndEventList(obj: TObject; pList,eList: TStringList): Boolean;
    var
      ClassTypeInfo: PTypeInfo; {類的信息結構指針}
      ClassDataInfo: PTypeData; {類的數據結構指針}
      propertyList : PPropList; {TPropInfo 是屬性的數據結構;
                                 PPropList 是其指針;
                                 TPropList 是屬性結構指針的列表數組;
                                 PPropList 是指向這個數組的指針}
    
      num : Integer;            {記錄屬性的總數}
      size: Integer;            {記錄屬性結構的大小}
      i: Integer;         
    begin
      ClassTypeInfo := obj.ClassInfo;              {先獲取: 類的信息結構指針}
      ClassDataInfo := GetTypeData(ClassTypeInfo); {再獲取: 類的數據結構指針}
      num := ClassDataInfo.PropCount;              {屬性總數}
      size := SizeOf(TPropInfo);                   {屬性結構大小}
    
      GetMem(propertyList, size*num);              {給屬性數組分配內存}
    
      GetPropInfos(ClassTypeInfo, propertyList);   {獲取屬性列表}
    
      for i := 0 to num - 1 do
      begin
        if propertyList[i].PropType^.Kind = tkMethod then {如果是事件; 事件也是屬性嗎, 給分出來}
          eList.Add(propertyList[i].Name)
        else
          pList.Add(propertyList[i].Name);
      end;
    
      pList.Sort; eList.Sort; {排序}
    
      FreeMem(propertyList); {釋放屬性數組的內存}
    
      Result := True;
    end;
    
    
    //測試
    procedure TForm1.Button1Click(Sender: TObject);
    var
      PL,EL: TStringList;
    begin
      PL := TStringList.Create;
      EL := TStringList.Create;
    
      Memo1.Clear;
      Memo2.Clear;
    
      GetPropertyAndEventList(Self, PL, EL); {調用函數, 第一個參數是對象名}
      Memo1.Lines := PL;
      Memo2.Lines := EL;
    
      PL.Free;
      EL.Free;
    end;
    
    end.
    
    Tips
    郴維網為您提供各類專業服務:
    軟件開發,電腦配件銷售,WIFI路由器銷售,上門電腦維修,上門安裝系統,系統安裝,軟、硬件安裝,電腦除塵清灰,顯示器維修,WIFI安裝調試,服務器維護,數據恢復,密碼破解,網絡布線,網絡檢修,打印機維修,打印機加碳粉,蘋果電腦安裝系統,蘋果電腦安裝雙系統,監控安裝維護,電腦外包,筆記本電腦維修,餐飲、美容行業軟件安裝 等。。。。。。
    點擊次數:766 更新時間:2020-3-9 18:51:35  【打印此頁
    關鍵詞推薦:郴州電腦城 郴州電腦維修公司 維修電腦公司 郴州軟件開發 上門電腦維修 上門安裝系統 筆記本電腦維修 郴州打印機維修 打印機加碳粉 電腦安裝雙系統 蘋果電腦雙系統 液晶顯示器維修 聯想筆記本維修 聯想筆記本維修電話 戴爾筆記本維修電話 郴州戴爾筆記本維修 戴爾筆記本郴州維修點 華碩筆記本維修點 郴州華碩筆記本維修 郴州筆記本上網維修
    亚洲成a人片77777,玩弄漂亮少妇高潮大叫,国产重口老太和小伙,两个黑人挺进校花体内np