2010-06-08 8 views
1

Pourquoi le code ci-dessous renvoie TRUE dans Delphi 7 et FALSE dans Delphi 2010? TBitBtn est un descendant de TButton.Delphi 2010 "est" déclaration se comporte différemment de Delphi 7?

type 
     TForm1 = class(TForm) 
     Button1: TButton; 
     BitBtn1: TBitBtn; 
     procedure Button1Click(Sender: TObject); 
     private 
     public 
     end; 

    var 
     Form1: TForm1; 

    implementation 

    {$R *.dfm} 

    procedure TestControl(aControl: TControl); 
    begin 
     if (aControl is TButton) then showmessage('TRUE') else showmessage('FALSE'); 
    end; 

    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
     TestControl(BitBtn1); 
    end; 
+1

Est-ce que 'TBitBtn' est vraiment la seule classe que vous avez testée avant de conclure que' is' est ce qui est différent? –

+1

Juste un très petit petit détail minuscule mais saviez-vous qu'il existe une fonction BoolToStr (je n'ai pas jusqu'à récemment) – Remko

+0

Merci, Remko. Je cherchais ça juste l'autre jour, mais je ne l'ai pas trouvé. Content que tu l'aies mentionné! - mais il retourne juste la représentation entière. Je sais qu'il y en a une qui renvoie une chaîne ("Vrai" ou "Faux") mais qui n'a pas pu se souvenir où elle est! – RobertFrank

Répondre

15

is n'a pas changé. TBitBtn is a subtype of TCustomButton, pas TButton, comme vous le dites.

+4

Oui, et cela a changé, je pense entre D2007 et D2009 – jasonpenny

+0

C'est tout! Merci, Craig. J'ai été piqué en retournant à l'aide de Delphi 7 pour vérifier son ancêtre! Il ne m'est jamais venu à l'esprit de vérifier l'aide de D2010 (que j'essaie d'éviter quand je peux ...) Merci, Craig et moi avons voté Jason, toi aussi! SO roches! – RobertFrank

+5

Tom, l'aide n'est jamais l'endroit où je cherche des trucs comme ça. Je consulte toujours le code source directement. Ctrl + clic sur l'identificateur 'TBitBtn' à prendre dans sa déclaration. –