2009-04-08 4 views
2

Ich habe einen benutzerdefinierten TAction-Typ erstellt, der über zwei zusätzliche Eigenschaften vom Typ string und enumeration verfügt.Delphi 2009 - Benutzerdefinierte Enum-Typ-Eigenschaft im Objektinspektor

Der Zeichenfolgenwert wird im Objektinspektor angezeigt, aber der Aufzählungstyp wird überhaupt nicht angezeigt. Wie kann ich einen benutzerdefinierten Aufzählungstyp anzeigen, der im Objektinspektor als Dropdown-Eigenschaftswert angezeigt wird?

Antwort

11

Enum-Eigenschaften sollten die Standardklasse TEnumProperty zum Bearbeiten der Eigenschaften verwenden.

Es sieht so aus, als ob die RTTI-Informationen nicht gefunden werden können. Wo ist der Enum-Typ definiert? In der gleichen Datei wie die Komponente?

Und tun Sie verwenden, um einen Aufzählungstyp mit benutzerdefinierten Werten wie:

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

Erklärung: Wenn Sie eine Enumeration mit Werten definieren Sie einen subrange Typen mit vordefinierten Konstanten erstellen. So ist die oben als interpretiert werden:

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

Dies zu seltsamen Situationen führen kann wie: Succ (aA) nicht aB aber 2. Die Informationen sind in der Hilfe (Language Guide) Einfache Typen [Aufzählungstypen mit explizit zugewiesener Ordnungsmäßigkeit].

Dies kann die Ursache des Problems sein.

Wenn alles andere fehlschlägt, können Sie einen eigenen Eigenschaftseditor erstellen. Welche kann die Enum-Eigenschaft im Objektinspektor ändern. Normalerweise können Sie die Standard-TEnumProperty verwenden. Aber wenn das nicht genug ist, können Sie Ihre eigene rollen:

Schritt 1, leiten Sie einen Eigenschafteneditor. In Ihrem Fall wird wahrscheinlich TEnumProperty (Unit DesignEditors) wahrscheinlich mit wenig Änderungen ausreichen.

Schritt 2, stellen Sie sicher, dass die Methoden GetValue und SetValue einwandfrei funktionieren. Sie müssen eine Zeichenfolge in die enum-Eigenschaft und zurück übersetzen.

Schritt 3, wenn Sie wirklich spezielle Bearbeitung wollen, achten Sie darauf, dass die Editiermethode überschrieben wird.

Schritt 4, stellen Sie sicher, dass die Editor-Attribute gültig sind.

Schritt 5, registrieren Sie den Eigenschafteneditor mit RegisterPropertyEditor.

Weitere Informationen finden Sie im Handbuch zum Komponentenschreiber.

+0

Hallo, Danke für Ihren Rat. Ich definierte die Enumeration mit benutzerdefinierten Werten, also entfernte ich diese und ließ einfach den Compiler die Werte generieren und es funktionierte gut. Sie wissen jedoch, warum Sie im Standard-Objektinspektor keine benutzerdefinierten Werte einer enum-Eigenschaft zuweisen können, um sie später zu lesen? – James

+0

Wenn Sie benutzerdefinierte Werte zuweisen, ist es keine Aufzählung mehr (es ist irgendwo in der Hilfedatei). –

+1

Eine vollständige Erklärung hinzugefügt. –