2009-09-03 3 views
1

Disons que je l'ai écrit assistant pour TStringListAppel de la fonction d'assistance dans la fenêtre Evaluation/Modification (Ctrl + F7)?

TslHelper = class helper for TStringList 
    function DoSth: boolean; 
end; 

Puis ive inclus cette aide (unité dans laquelle aide est définie) dans l'unité que je veux l'utiliser. Au cours de débogage pressez la touche i Ctrl +F7 et je veux évaluer:

someStringList.DoSth 

Je ne peux pas le faire fonctionner. C'est possible?

+0

Cela fonctionne très bien quand je l'essaie. Quelle erreur obtenez vous? –

+0

Avez-vous appuyé sur Ctrl + F7 et tapé 'someStringList.DoSth' dans la fenêtre Évaluer/Modifier? – m0f0

Répondre

3

Les aides de classe introduisent de nouvelles méthodes dans la portée actuelle. Si une aide de classe n'est pas dans la portée, alors ses méthodes ne prennent pas effet, même si la classe qu'elles aident est. Ainsi, la première étape pour le faire fonctionner est de s'assurer que TslHelper est l'assistant de classe qui serait en vigueur au point actuel de votre programme.

Si vous avez satisfait à cette exigence, mais que cela ne fonctionne toujours pas, il est possible que le débogueur ne reconnaisse tout simplement pas les aides de classe. Ils sont un peu un hack de toute façon, donc je ne serais pas trop surpris si le débogueur ne les reconnaissait pas. En fin de compte, les aides de classe ne sont que du sucre syntaxique. L'assistant de classe ci-dessus aurait pu tout aussi bien pu être écrit en fonction autonome, comme ceci:

function TStringList_DoSth(SL: TStringList): Boolean; 

Write fonction en utilisant votre implémentation actuelle de la méthode, puis utilisez la fonction pour mettre en œuvre vous aide de la classe:

function TslHelper.DoSth: Boolean; 
begin 
    TStringList_DoSth(Self); 
end; 

Vous pouvez continuer à appeler la méthode class-helper dans votre code normal, mais vous pouvez revenir à la fonction standalone dans le débogueur.

+0

effectivement je l'ai fait juste cela;] – m0f0

Questions connexes