2010-02-09 3 views
2

J'ai du code que je partage avec un autre développeur. J'ai un bon module de débogage que je laisse à travers les tests unitaires mais il n'a pas ça, donc c'est une bataille d'ajouter et de supprimer le code constamment.Delphi 2009 - Détecter si le composant est installé

serait bien s'il y avait une façon que nous pourrions utiliser une condition (un peu comme la version Delphi ou Unicode) comme

{$IfDef MYComponent} 
    MyComponent := TMyComponent.Create; 
    MyComponent.Logging := true; 
    {$EndIf} 

Je suppose que je pourrais mettre mon ide pour définir quelque chose, mais je me demande s'il y a un moyen de détecter si le composant est installé ...

+0

Pour l'utilisation que vous décrivez, vous n'avez pas besoin du composant ** installé **. Il suffit d'avoir le code source (préférable) ou les DCU (moins préférable). –

Répondre

2

Vous pouvez lui faire utiliser une unité de composant qui a seulement des implémentations de bout. par exemple:

type 
    TMyComponent = class 
    procedure DoSomething(); 
    end; 

procedure TMyComponent.DoSomeThing(); 
begin 
    //no-op 
end; 

Si vous souhaitez utiliser différents noms d'unités que vous pouvez utiliser l'option d'alias d'unité de Delphi situé dans les options de projet -> Annuaires et conditionals -> Alias ​​d'unité: ajouter un alias pour l'unité UnitMyComponent -> UnitDummyMyComponent .

Vous pouvez maintenant utiliser un code au moins ifdef gratuit!

0

Pas exactement ifdefs, mais vous pouvez utiliser l'héritage de classe et tester par assigné pour voir si vous devriez prendre une action. Vous voudriez toujours avoir une sorte de configuration de proxy, de sorte que vous et l'autre développeur pouvez compiler ... juste votre version a la cible ajoutée du proxy. Par exemple:

Dans l'unité « partagée » que les développeurs auraient serait quelque chose comme ceci:

type 
    TMyComponent = class 
    public 
    procedure DoSomething; virtual; 
    end; 

var 
    MyComponent : TMyComponent; 

procedure TMyComponent.DoSomething; 
begin 
    // stubbed 
end; 

dans votre unité « spéciale » vous auriez le code suivant:

type 
    TMyRealComponent = Class(tMyComponent) 
    public 
    procedure DoSomething; override; 
    end; 

procedure TMyRealComponent.DoSomething; 
begin 
    // do the real process here 
end; 

initialization 
    MyComponent := TMyRealComponent.Create; 
finalization 
    if Assigned(MyComponent) then 
    MyComponent.Free; 
end. 

Dans votre code lorsque vous voulez voir si son ok pour faire quelque chose que vous pouvez écrire:

if Assigned(MyComponent) then 
    MyComponent.DoSomething; 

I Si vous souhaitez désactiver ce code de débogage, supprimez l'unité spéciale du projet.

10

Essayez ce (qui devrait fonctionner dans toutes les versions depuis Delphi 6):

{$IF DECLARED(TMyComponent)} 
{$IFEND} 

Vous pouvez simplement mettre à jour votre liste uses pour faire ce composant visible ou non.

Questions connexes