C++ Builder 參考手冊 ? System ? TObject
System::TObject 是所有的 VCL 和 FMX 控件的頂級父類寺惫。
- System::TObject 簡介
- System::TObject 成員
- 例子:
多個控件共用一個事件函數(shù)
獲取一個控件的所有的父類一直到頂級父類
枚舉所有的屬性均澳、方法烦粒、事件和成員變量
一. System::TObject 簡介
System::TObject 是所有的 VCL 和 FMX 控件的頂級父類撑刺。
- 頭文件:
#include <systobj.h>
- 命名空間:
System
- 對象實例的創(chuàng)建直奋、維護、和銷毀時的內(nèi)存管理
- 響應對象實例的創(chuàng)建和銷毀
- 提供返回對象的類型 (class-type) 和實例信息 (instance information)湖笨,
- 支持返回 __published: 屬性的運行時類型信息 (RTTI, runtime type information)。
- 支持消息處理
- 支持接口的實現(xiàn) (interfaces implemented)
- TObject 和從 TObject 繼承來的類不能直接定義為對象捎谨,必須定義為指針,用 new 創(chuàng)建出來憔维;
- TObject 是一個抽象類涛救,雖然在程序代碼上沒有限制直接創(chuàng)建一個 TObject 實例;
二. System::TObject 的成員
成員函數(shù) | 說明 |
---|---|
public: | ? |
AfterConstruction | 在構造函數(shù)結束的時候會自動調用 AfterConstruction |
BeforeDestruction | 在執(zhí)行析構函數(shù)之前會自動調用 BeforeDestruction |
ClassInfo | 返回運行時類型信息表 (RTTI table) |
ClassName | 獲取類名业扒,不包含命名空間的類名字符串 |
ClassNameIs | 判斷類名是否為參數(shù)指定的字符串 |
ClassParent | 返回父類的類型信息 |
ClassType | 返回類的類型信息 |
CleanupInstance | 清除長字符串检吆、Variants、接口變量等 |
DefaultHandler | 默認的消息處理 |
Dispatch | 處理消息的函數(shù) |
DisposeOf | 強制銷毀對象 |
Equals | 比較當前對象和 Obj 對象是否相同 |
FieldAddress | 通過成員名稱返回成員的地址 |
Free | 銷毀對象 (Delphi) |
FreeInstance | 釋放 NewInstance 分配的內(nèi)存 |
GetHashCode | 返回對象的 hash 值 |
GetInterface | 獲取指定的接口 |
GetInterfaceEntry | 獲取接口項目 |
GetInterfaceTable | 獲取接口表 |
InheritsFrom | 當前對象的類是否從 AClass 繼承過來的 |
InitInstance | 初始化成員程储,給他們清零 |
InstanceSize | 返回給實例數(shù)據(jù)分配內(nèi)存需要多少字節(jié)數(shù) |
MethodAddress | 通過名稱返方法的地址 |
MethodName | 通過方法的地址返回名稱 |
NewInstance | 給實例分配內(nèi)存蹭沛,并且返回新的實例的地址 |
QualifiedClassName | 返回包含命名空間的類名 |
SafeCallException | 處理異常的函數(shù) |
TObject | 構造函數(shù) |
~TObject | 析構函數(shù) |
ToString | 轉為字符串 |
UnitName | 返回類所在的命名空間 |
UnitScope | 返回類所在的命名空間 |
三. 例子
1. 多個控件共用一個事件函數(shù)
- 控件的事件一般都有一個參數(shù)是 TObject *Sender,這個指針指向產(chǎn)生事件的控件虱肄,可以通過這個指針來區(qū)分不同的控件致板。
- 除了可以通過控件的 Name 屬性區(qū)分不同的控件之外交煞,還可以使用控件的 Tag 屬性來區(qū)分咏窿,這個屬性是整數(shù),可以隨意指定不同的整數(shù)值來區(qū)分不同的控件素征,整數(shù)可以方便的使用 switch 語句集嵌。
這個例子把 Button1、Button2御毅、Button3 的 Tag 屬性分別設為 101根欧、102、103端蛆。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Add(Sender->ClassName());
TButton *lpButton = dynamic_cast<TButton *>(Sender);
if(lpButton)
{
Memo1->Lines->Add(lpButton->Name);
Memo1->Lines->Add(lpButton->Tag);
switch(lpButton->Tag)
{
case 101: break; // Tag 編號為 101 的按鈕
case 102: break; // Tag 編號為 102 的按鈕
case 103: break; // Tag 編號為 103 的按鈕
}
}
}
運行結果:點擊按鈕 Button2凤粗,可以得到控件的類名 "TButton",名稱 "Button2" 和 Tag 編號 102今豆。
2. 獲取一個控件的所有的父類一直到頂級父類
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TObject *p = Button1;
TClass c = p->ClassType();
while(c)
{
Memo1->Lines->Add(c->ClassName());
c = c->ClassParent();
}
}
運行結果:可以看到嫌拣,Button1 是 TButton 類柔袁,父類是 TCustomButton,TCustomButton 的父類是 TButtonControl异逐,……一直到頂級父類 TObject捶索。
3. 枚舉所有的屬性、方法灰瞻、事件和成員變量
請參考《C++ Builder 枚舉控件所有的屬性腥例、事件和方法》的 void ShowAllMembers(TObject *pObject) 函數(shù),可以枚舉從 TObject 繼承的類的所有的成員酝润,包括屬性燎竖、事件、方法和成員變量要销。
參考:
- System::Classes::TComponent
- System::Classes::TPersistent
- System::Classes
- System
- 枚舉控件所有的屬性底瓣、事件和方法
- VCL 類繼承關系
C++ Builder 參考手冊 ? System ? TObject