文字列型と列挙型の 2 つの追加プロパティを持つカスタム TAction タイプを作成しました。
文字列値はオブジェクト インスペクターに表示されますが、列挙型はまったく表示されません。カスタム列挙型をオブジェクト インスペクターのドロップダウン プロパティ値として表示するにはどうすればよいですか?
文字列型と列挙型の 2 つの追加プロパティを持つカスタム TAction タイプを作成しました。
文字列値はオブジェクト インスペクターに表示されますが、列挙型はまったく表示されません。カスタム列挙型をオブジェクト インスペクターのドロップダウン プロパティ値として表示するにはどうすればよいですか?
列挙プロパティは、プロパティを編集するためにデフォルトの TEnumProperty クラスを使用する必要があります。
RTTI情報が見つからないようです。列挙型はどこで定義されていますか? コンポーネントと同じファイル内?
そして、次のようなカスタム値で列挙型を使用しますか?
TMyEnum = (aA = 1, aB = 3);
説明: 値で列挙型を定義すると、事前定義された定数で部分範囲型が作成されます。したがって、上記は次のように解釈されます。
type
TMyEnum = 1..3;
const
aA : TMyEnum = 1;
aB : TMyEnum = 3;
これは、次のような奇妙な状況につながる可能性があります: Succ(aA) は aB ではなく 2 です。情報はヘルプ (言語ガイド) にあります。 単純型 [明示的に割り当てられた順序を持つ列挙型]。
これが問題の原因である可能性があります。
他のすべてが失敗した場合は、独自のプロパティ エディターを作成できます。オブジェクト インスペクターで enum プロパティを変更できます。通常は、デフォルトの TEnumProperty を使用できます。しかし、それだけでは不十分な場合は、独自のロールを作成できます。
ステップ 1、プロパティ エディタを派生させます。あなたの場合、おそらく TEnumProperty (ユニット DesignEditors) で十分でしょう。
ステップ 2、GetValue メソッドと SetValue メソッドが正常に機能することを確認します。文字列を enum プロパティに変換して戻す必要があります。
ステップ 3、本当に特別な編集が必要な場合は、必ず編集メソッドをオーバーライドしてください。
ステップ 4、editor 属性が有効であることを確認します。
ステップ 5、RegisterPropertyEditor を使用してプロパティ エディターを登録します。
詳細については、コンポーネント作成者ガイドを参照してください。