Embarcadero Delphi
Utiliser RTTI dans Delphi
Recherche…
Introduction
Delphi a fourni des informations de type d'exécution (RTTI) il y a plus de dix ans. Pourtant, même aujourd'hui, de nombreux développeurs ne sont pas pleinement conscients de ses risques et de ses avantages.
En bref, les informations sur le type d'exécution sont des informations sur le type de données d'un objet qui est défini en mémoire au moment de l'exécution.
RTTI permet de déterminer si le type d'un objet est celui d'une classe particulière ou de l'un de ses descendants.
Remarques
RTTI IN DELPHI - EXPLIQUÉ
L' information sur le type d'exécution dans Delphi - Peut-il faire quelque chose pour vous? L'article de Brian Long constitue une excellente introduction aux fonctionnalités RTTI de Delphi. Brian explique que la prise en charge de RTTI dans Delphi a été ajoutée avant tout pour permettre à l’environnement de conception de faire son travail, mais que les développeurs peuvent également en tirer parti pour obtenir certaines simplifications de code. Cet article fournit également un excellent aperçu des classes RTTI avec quelques exemples.
Exemples: lecture et écriture de propriétés arbitraires, propriétés communes sans ancêtre commun, copie des propriétés d'un composant à un autre, etc.
Informations de base sur la classe
Cet exemple montre comment obtenir l'ascendance d'un composant à l'aide des propriétés ClassType
et ClassParent
. Il utilise un bouton Button1: TButton
et une zone de liste ListBox1: TListBox
sur un formulaire TForm1
.
Lorsque l'utilisateur clique sur le bouton, le nom de la classe du bouton et les noms de ses classes parentes sont ajoutés à la liste.
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;
La zone de liste contient les chaînes suivantes après que l'utilisateur clique sur le bouton:
- TButton
- TButtonControl
- TWinControl
- TControl
- Composant
- TPersistent
- TObject