每議程煉-Rtti 單元讀取或者設定類屬性

來源:互聯網
上載者:User

通過 Rtti 還能夠調用一個類的方法, 也能讀取或設定其屬性值.

Demo下載Rtti單元讀取設定一個類

代碼部分:</p><p>unit Unit1;</p><p>interface</p><p>uses<br />Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br />Dialogs, StdCtrls;</p><p>type<br />TForm1 = class(TForm)<br />btn1: TButton;<br />btn2: TButton;<br />btn3: TButton;<br />procedure btn1Click(Sender: TObject);<br />procedure btn2Click(Sender: TObject);<br />procedure btn3Click(Sender: TObject);<br />private<br />{ Private declarations }<br />public<br />{ Public declarations }<br />end;<br />{自訂的類}<br />TMyClass = class(TComponent)<br />public<br />procedure msg(const str: string);<br />function Add(const a,b: Integer): Integer;<br />end;</p><p>var<br /> Form1: TForm1;</p><p>implementation</p><p>uses<br />Rtti;</p><p>{$R *.dfm}</p><p>{ MyClass 類的實現 -----------------------------------------------------------}</p><p>procedure TMyClass.msg(const str: string);<br />begin<br /> MessageDlg(str, mtInformation, [mbYes], 0);<br />end;</p><p>function TMyClass.Add(const a, b: Integer): Integer;<br />begin<br />Result := a + b;<br />end;</p><p>procedure TForm1.btn1Click(Sender: TObject);<br />var<br /> obj: TMyClass;<br /> t: TRttiType;<br /> m1,m2: TRttiMethod;<br /> r: TValue; //TRttiMethod.Invoke 的傳回型別<br />begin<br /> t := TRttiContext.Create.GetType(TMyClass);</p><p>{擷取 TMyClass 類的兩個方法}<br />m1 := t.GetMethod('msg'); {procedure}<br />m2 := t.GetMethod('Add'); {function}</p><p>obj := TMyClass.Create(Self); {調用需要依賴一個已存在的對象}</p><p>{調用 msg 過程}<br />m1.Invoke(obj, ['Delphi 2010']); {將彈出資訊框}</p><p>{調用 Add 函數}<br />r := m2.Invoke(obj, [1, 2]); {其傳回值是個 TValue 類型的結構}<br />ShowMessage(IntToStr(r.AsInteger)); {3}</p><p>obj.Free;<br />end;</p><p>procedure TForm1.btn2Click(Sender: TObject);<br />var<br />obj: TMyClass;<br />t: TRttiType;<br />p: TRttiProperty;<br />r: TValue;<br />begin<br />obj := TMyClass.Create(Self);</p><p>t := TRttiContext.Create.GetType(TMyClass);</p><p>p := t.GetProperty('Name');<br />p.SetValue(obj, 'NewName');</p><p>r := p.GetValue(obj);<br />ShowMessage(r.AsString); {NewName}</p><p>obj.Free;<br />end;</p><p>procedure TForm1.btn3Click(Sender: TObject);<br />var<br />t: TRttiType;<br />p: TRttiProperty;<br />r: TValue;<br />begin<br />t := TRttiContext.Create.GetType(TButton);</p><p>p := t.GetProperty('Align');<br />p.SetValue(btn3, TValue.FromOrdinal(TypeInfo(TAlign), Ord(alLeft)));</p><p>r := p.GetValue(btn3);<br />ShowMessage(IntToStr(r.AsOrdinal)); {3}<br />end;</p><p>end.</p><p>表單部分:</p><p>object Form1: TForm1<br />Left = 0<br />Top = 0<br />Caption = #24858#20154#31508#35760' - http://www.foolcode.com'<br />ClientHeight = 144<br />ClientWidth = 578<br />Color = clBtnFace<br />Font.Charset = DEFAULT_CHARSET<br />Font.Color = clWindowText<br />Font.Height = -11<br />Font.Name = 'Tahoma'<br />Font.Style = []<br />OldCreateOrder = False<br />PixelsPerInch = 96<br />TextHeight = 13<br />object btn1: TButton<br />Left = 72<br />Top = 66<br />Width = 105<br />Height = 57<br />Caption = #35843#29992#23384#22312#30340#23545#35937#31867<br />TabOrder = 0<br />OnClick = btn1Click<br />end<br />object btn2: TButton<br />Left = 208<br />Top = 69<br />Width = 154<br />Height = 52<br />Caption = #20462#25913#19968#20010#31867#26576#20010#23454#20363#30340#23646#24615<br />TabOrder = 1<br />OnClick = btn2Click<br />end<br />object btn3: TButton<br />Left = 384<br />Top = 69<br />Width = 161<br />Height = 52<br />Caption = #20462#25913'button'#31867#35813#25353#38062#30340#23646#24615<br />TabOrder = 2<br />OnClick = btn3Click<br />end<br />end

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.