2009-04-08 21 views
2

文字列と列挙型の2つの追加プロパティを持つカスタムTAction型を作成しました。Delphi 2009 - オブジェクトインスペクタのカスタム列挙型のプロパティ

オブジェクトインスペクタでstring値が表示されていますが、列挙型がまったく表示されません。オブジェクトインスペクタのドロップダウンプロパティ値として表示するカスタム列挙型を取得するにはどうすればよいですか?

答えて

11

プロパティを編集するには、EnumプロパティでデフォルトのTEnumPropertyクラスを使用する必要があります。

RTTI情報が見つからないようです。列挙型はどこで定義されていますか?コンポーネントと同じファイルですか?

そして、あなたのようなカスタム値を列挙型を使用して行います。

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

説明:あなたが値を持つ列挙型を定義する場合は、事前に定義された定数を持つ部分範囲型を作成します。成功回数(AA)がαBはありませんが、2 情報は、ヘルプ(言語ガイド)にあるシンプルタイプ[列挙型:これは、のような奇妙な状況につながることができ

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

:だから、上記のように解釈されるべきです明示的に指定された順序で]。

これが原因の可能性があります。

その他すべてが失敗した場合は、独自のプロパティエディタを作成できます。オブジェクトインスペクタのenumプロパティを変更することができます。通常、デフォルトのTEnumPropertyを使用することができます。しかし、これで十分でない場合は、自分自身をロールバックすることができます:

ステップ1:プロパティエディタを作成します。おそらくTEnumProperty(Unit DesignEditorsユニット)はおそらくほとんど変わりません。

ステップ2、GetValueメソッドとSetValueメソッドが正常に動作することを確認します。文字列をenumプロパティに変換して戻す必要があります。

実際の特別な編集をしたい場合は、手順3を確認してください。

ステップ4、eeditor属性が有効であることを確認してください。

ステップ5、RegisterPropertyEditorを使用してプロパティエディタを登録します。

詳細については、コンポーネントライターガイドを参照してください。

+0

こんにちは、 ありがとうございます。カスタム値で列挙型を定義していたので、これらを削除してコンパイラに値を生成させても問題ありません。 しかし、今後の参照のために、デフォルトのオブジェクトインスペクタの列挙型プロパティにカスタム値を割り当てることができない理由が分かりますか? – James

+0

カスタム値を割り当てると、それはもはや列挙型ではありません(ヘルプファイルのどこかにあります)。 –

+1

詳しい説明が追加されました。 –