RAD Studio VCL Reference
|
Returns the type of the immediate ancestor of a class.
class function ClassParent: TClass;
TClass ClassParent();
System::TObject::ClassParent returns the name of the parent class for an object instance or class reference. For System::TObject, System::TObject::ClassParent returns nil (Delphi) or NULL (C++).
Avoid using System::TObject::ClassParent in application code.
C++ Examples:
/* This example shows how to obtain the ancestry of a component using the ClassType and ClassParent properties. It uses a button and a list box on a form. When the user clicks the button, the name of the button’s class and the names of its parent classes are added to the list box. */ void __fastcall TForm1::Button1Click(TObject *Sender) { TClass ClassRef; ListBox1->Clear(); ClassRef = Sender->ClassType(); while (ClassRef != NULL) { ListBox1->Items->Add(ClassRef->ClassName()); ClassRef = ClassRef->ClassParent(); }; } /* The list box contains the following strings after the user clicks the button: TButton TButtonControl TWinControl or TWinControl TControl TComponent TPersistent TObject */
/* For the following example, add a button, a status bar, and a list box to the form. Set the SimplePanel property of the status bar to true, using the object inspector. Also, populate the OnMouseUp event handler for the list box. The following code fills a list box with the names of all components on the form when the user clicks the button. References to the components themselves are inserted along with the names. The components are all inserted at the front of the list, so that the last component added to the form is the first component in the list. When the user right-clicks the name of an object in the list, the component’s coordinates are displayed on the status bar. Note that because we are using the right- click, the item need not be selected. */ void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i = 0; i < ComponentCount; i++) ListBox1->Items->InsertObject(0, Components[i]->Name, dynamic_cast<TObject *>(Components[i])); } void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button == mbRight) { TClass ClassRef; int Index = ListBox1->ItemAtPos(Point(X,Y), true); // only components that are controls have a position // make sure the component is a control for (ClassRef = ListBox1->Items->Objects[Index]->ClassType(); ClassRef != NULL; ClassRef = ClassRef->ClassParent()) if (String(ClassRef->ClassName()) == "TControl") { TControl *TheObject = dynamic_cast<TControl *>(ListBox1->Items->Objects[Index]); StatusBar1->SimpleText = TheObject->Name + " is at (" + IntToStr(TheObject->Left) + ", " + IntToStr(TheObject->Top) + ")"; break; } if (ClassRef == NULL) // if it wasn't a control MessageBeep(0); } }
Delphi Examples:
{ This example shows how to obtain the ancestry of a component using the ClassType and ClassParent properties. It uses a button and a list box on a form. When the user clicks the button, the name of the button’s class and the names of its parent classes are added to the list box. } procedure TForm1.Button1Click(Sender: TObject); var ClassRef: TClass; begin ListBox1.Clear; ClassRef := Sender.ClassType; while ClassRef <> nil do begin ListBox1.Items.Add(ClassRef.ClassName); ClassRef := ClassRef.ClassParent; end; end; { The list box contains the following strings after the user clicks the button: TButton TButtonControl TWinControl or TWinControl TControl TComponent TPersistent TObject }
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|