Delphi:なんか私のプロパティエディタが編集?
-
22-09-2019 - |
質問
私にはプロパティエディタ(その子孫のTPropertyEditorることにより、再編集したい場合は、編集したい物件です。
時期に合わせ、編集も、どうやって知財産のオブジェクト僕は編集?について知っておきましょう編集しているのかを知財産の私が編集する。
って引き髪、取捨選択を通じて、Delphi、オンラインヘルプ、TPropertyEditorおよびその子孫のソースコードとして解答すること。
いいということでしょうかい:
TPropertyEditor = class(...)
public
procedure Initialize(TheObject: TObject; ThePropertyName: string);
end;
調査を実施しているのは、同じように、私のプロパティエディタを作成し、また"編集"しかないのではないかと思神う物件れていただきたくて編集できるようになります。
することにより:
編集モーテル
ときもオプションとしてダイアログ ボックスのユーザーを確認することが可能に 編集物件です。最も一般的に使用 のプロパティエディタには物件 こう。An の例としては、 フォント 性のための のユーザーを開設できるフォントのダイアログ ボックスを選択すべての属性 フォントです。
を提供 全プロパティエディタダイアログボックス オーバーライドのエディタクラスの 編集 方法。
編集 方法と同一の GetおよびSetメソッドを使書面 GetValue や SetValue ます。に 事実、 編集 メソッドの呼び出しの両方を取得 方法と設定方法です。なので ファイルをテキストエディタタイプ特異的であ 通常なしに変換する必要があるの プロパティの値を文字列です。編集 一般的にお得な価値"として 取得されます。"
ユーザがクリックした際の飛びの"..."ボタン 次に、財産またはダブルクリック 値カラム、オブジェクト検査 通話のプロパティエディタの 編集 方法。
内で実施 の 編集 方法は、以下の手順を実行します。
- の構築エディタを使用 のための物件です。
- の読み込み電流 価値に割り当て物件 用"Get"メソッドです。
- 時にユーザー を選択し新しい価値に割り当てる値 の財産の使用の設定方法です。
- を破壊します。
答え
でひっそりと佇む、記載されていないが、ことが判明した。の思い編集:
TheCurrentValue := TMyPropertyThing(Pointer(GetOrdValue));
この値は、編集することができます。したい場合は置き換えに他のオブジェクト:
SetOrdValue(Longint(TheNewValue));
のフルコード:
をプロパティエディタが降りから TClassProperty:
TMyPropertyEditor = class(TClassProperty)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;
最初の家かDelphiのオブジェクトを検査する私のプロパティエディタに表示すダイアログボックスでは、この"..."が表示されますの物件:
function TMyPropertyEditor.GetAttributes: TPropertyAttributes;
begin
//We show a dialog, make Object Inspector show "..."
Result := [paDialog];
end;
次に、などに取り組んでいます。ユーザがクリックした際の飛びの"..."ボタンを押すと、オブジェクト掛かっ 編集 方法。フレキシビリティといった欠であると私は私の GetOrdValue 方法。でも私の財産ではない 序, でも、利用で、キャストのようなことがオブジェクト:
procedure TMyPropertyEditor.Edit;
var
OldThing: TMyPersistentThing;
NewThing: TMyPersistentThing;
begin
//Call the property's getter, and return the "object" i'm editing:
OldThing:= TMyPersistentThing(Pointer(GetOrdValue));
//now that i have the thing i'm editing, do stuff to "edit" it
DoSomeEditing(OldThing);
//i don't have to, but if i want to replace the property with a new object
//i can call the setter:
NewThing := SomeVariant(OldThing);
SetOrdValue(Longint(NewThing));
end;
解決
がわかれば、ご質問、まだ迷ってどのようだが、実際に見の価値が必要編集し、特にオブジェクトが次のどれかの場合に問題となりましたが、その一人です。答えは、このIDEセットのためのプロパティエディタが"予圧"の編集が呼び出されます。TPropertyEditor付属の束GetValue方法と編集機能は利用を取得する値です。だかないといけない人た場合には、このオブジェクトから降りTPersistent、例えば)話ができGetOrdValueキャストの結果をTPersistent.
のですが、チェックアウトしたいとしTJvPersistentPropertyEditorのJvDsgnEditorsユニットのJVCLとしての用途基底クラスです。この機能です。
ちなみれば本当に必要な利用可能ですGetNameメソッドから返される値、まだプロパティの名前ですが通常はないと思います。に付着しないようにしてくださいま継承からの以外のものTPropertyEditorついては、GetName()で 仮想 できるオーバーライドになります。
他のヒント
Aプロパティエディタに関する情報をオブジェクトやプロパティで編集し、民間 FPropList
可変となります。IDEを埋めることを呼び出しのエディタの SetPropEntry
方法。使わないようご注意くださいは、一般に考えられている、様々な方法 TPropertyEditor
のプロパティの値です。
でっどの財産または編集できるようになります。御プロパティエディタに編集の特性、特定のタイプです。のための版でエディタを実装を提供する SetValue
変換する文字列からオブジェクト検査員への価値の適切なタイプの物件を呼び出すのに適 Set
機能など SetOrdValue
または SetIntfValue
.全体-財産の編集、IDEな話 SetValue
.その代わりに、コン Edit
, まる電話 GetOrdValue
または GetIntfValue
(例えば)、以降のエディタが既に知ってどのような物件ザが編集できるようになります。
覚えているプロパティエディタは、一般には、編集可能なプロパティが複数存在す。の 名称 プロパティの同じであって、コンポーネントの種類の組織で所属しているあたり、その場合は、所定の手続きがそのsetterか、セッター.お呼びプロパティエディタの GetName
方法を見出するためのものでした。のオブジェ話 GetComponent
のための各インデックス0から PropCount
1のとおりとする。(ご注意;ある範囲の確認に Get
ます。) 確認することもできるかどうかは特定のオブジェクトのリストを呼び出し HasInstance
.の GetPropInfo
方法を伝える PPropInfo
ポインタを 第 物件とは言えないように思いるものと同一のポインタのその他の物件です。その他には、得られないときには、いくつかの直接のアクセス PPropInfo
データがであることが発表されない。たくさん必要なものするためのエディタ、 しょう という悪かったのか、後の新たな問題に、より特定の情報と配下です。
プロパティエディタのみを慮(および登録) タイプ のではなく、特定のプロパティそのものです。