2009-04-08 10 views
2

J'ai créé un type TAction personnalisé qui a 2 propriétés supplémentaires de type chaîne et énumération.Delphi 2009 - Propriété de type Enum personnalisé dans l'inspecteur d'objets

La valeur de chaîne est affichée dans l'inspecteur d'objets, mais le type d'énumération n'apparaît pas du tout. Comment puis-je obtenir un type d'énumération personnalisé à afficher en tant que valeur de propriété dans l'inspecteur d'objets?

Répondre

11

Les propriétés Enum doivent utiliser la classe TEnumProperty par défaut pour modifier les propriétés.

Il semble que les informations RTTI sont introuvables. Où est défini le type enum? Dans le même fichier que le composant?

Et utilisez-vous un type ENUM avec des valeurs personnalisées comme:

TMyEnum = (aA = 1, aB = 3); 

Explication: si vous définissez un ENUM avec des valeurs, vous créez un type de sous-gamme avec des constantes prédéfinies. Donc, ce qui précède doit être interprété comme:

type 
    TMyEnum = 1..3; 
const 
    aA : TMyEnum = 1; 
    aB : TMyEnum = 3; 

Cela peut conduire à des situations étranges comme: Succ (aA) n'est pas aB mais 2. L'information est dans l'aide (guide linguistique) types simples [dénombrées Types avec une ordinalité explicitement affectée].

Cela peut être la source du problème.

Si tout le reste échoue, vous pouvez créer votre propre éditeur de propriétés. Lequel est capable de changer la propriété enum dans l'inspecteur d'objets. Normalement, vous pourrez utiliser le TEnumProperty par défaut. Mais si cela ne suffit pas, vous pouvez rouler le vôtre:

Étape 1, dérivez un éditeur de propriétés. Dans votre cas, probablement TEnumProperty (unité DesignEditors) suffira probablement avec peu de changements.

Étape 2, assurez-vous que les méthodes GetValue et SetValue fonctionnent correctement. Ils ont besoin de traduire une chaîne dans la propriété enum et retour. Étape 3, si vous voulez une édition spéciale, assurez-vous de remplacer la méthode d'édition.

Étape 4, assurez-vous que les attributs de l'éditeur sont valides.

Étape 5, enregistrez l'éditeur de propriétés à l'aide de RegisterPropertyEditor. Pour plus d'informations, reportez-vous au guide des graveurs de composants pour plus d'informations.

+0

Bonjour, Merci pour votre avis. Je définissais l'énumération avec des valeurs personnalisées, j'ai donc supprimé ces valeurs et j'ai laissé le compilateur générer les valeurs et cela a bien fonctionné. Cependant, juste pour référence future, savez-vous pourquoi vous ne pouvez pas attribuer de valeurs personnalisées à une propriété enum dans l'inspecteur d'objets par défaut? – James

+0

Si vous affectez des valeurs personnalisées, ce n'est plus une énumération (c'est quelque part dans le fichier d'aide). –

+1

Ajout d'une explication complète. –

Questions connexes