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.
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
Wenn Sie benutzerdefinierte Werte zuweisen, ist es keine Aufzählung mehr (es ist irgendwo in der Hilfedatei). –
Eine vollständige Erklärung hinzugefügt. –