En VB le mot réservé TypeOf est utilisé pour tester "la nature" d'un objet (type, genre de control, etc) selon la syntaxe suivante :Y a-t-il un équivalent en Delphi ?Code:If TypeOf MonObjet Is MonTypeOuMonControle Then
Merci
Version imprimable
En VB le mot réservé TypeOf est utilisé pour tester "la nature" d'un objet (type, genre de control, etc) selon la syntaxe suivante :Y a-t-il un équivalent en Delphi ?Code:If TypeOf MonObjet Is MonTypeOuMonControle Then
Merci
Pour les objets, tu as l'opérateur is qui teste si la classe de l'objet est ou dérive d'une classe donnée :
Pour les autres types, ben comme ils sont déclarés et immuables, ça n'a pas de sens ;)Code:if MonObjet is TMaClasse then
Si tu travailles avec des Variant tu as VType.
OK Merci. Je teste avant de mettre en résolu.
J'ai essayé de faire une petite manip :J'ai bien le message quand je clique sur le bouton, cependant si je remplace TDatabase dans le test du if par un autre type :Code:
1
2
3
4
5
6
7 procedure TForm2.Button1Click(Sender: TObject); var b : TDatabase; begin if b is TDatabase then showmessage('oukich'); end;
j'ai une erreur de compilation. Dans mon code je serai amené à parcourir les contrôles de ma form et à tester leurs types un a un. Est-ce que l'opérateur is marchera pour effectuer une telle opération ? MerciCode:if b is TUneAutreClasse then
L'opérateur is peut être appliqué lorsque le type déclaré de la variable et la classe inscrite à droite sont directement parentes. À savoir que l'un soit descendant de l'autre
Donc si ta variable est de type TObject, l'opérateur is fonctionne toujours, car toutes les classes dérivent de TObject. Mais ici ta variable est de type TDatabase, donc seules les classes dont dérive TDatabase ou qui dérivent de TDatabase peuvent être employées avec is.
essaie
Code:if b.classname='TDatabase' then ...
Non ! Surtout pas ! Ca c'est vraiment hyper moche et dangereux comme programmation !
C'est l'opérateur is qu'il faut utiliser, pas autre chose.
Dans certains cas très spécifiques, une comparaison de ClassType peut être envisagée, mais en aucun cas de ClassName.
ComprisCitation:
Envoyé par sjrd
Ca ne semble pas marcher, et quand je fais unCitation:
Envoyé par domlagagne
j'obtiens TButton8O ????Code:showmessage(b.classname)