私はボイラープレート機能を実装しています - ユーザーがいくつかのコンポーネントの説明を変更できるようにします - TLabel
s のように - 実行時に。例えば
TFooClass = Class ( TBaseClass)
Label : Tlabel;
...
End;
Var FooClass : TFooClass;
...
設計時には、Label のキャプション プロパティの値は「First Name」です。アプリケーションの実行時に、ユーザーがキャプション値を「Other Name」に変更できる機能があります。これが変更されると、FooClass のクラス インスタンスのラベルのキャプションがすぐに更新されます。
現在の問題は、ユーザーが何らかの理由で 'First Name' などの設計時の値に戻したい場合、それは不可能に思えることです。
私はRTTIContextメソッドとそのすべてを使用できますが、結局のところ、値を変更するにはクラスのインスタンスが必要なようで、これはすでに変更されているため、レンガの壁にぶつかったようですそれを回避する。
私の質問はこれです-クラスをインスタンス化せずに、クラスのメンバーのプロパティに古いRTTIメソッドまたは新しいRTTIContextのものを使用する方法はありますか-つまり、ClassType定義からプロパティを取得します。
これは私の試みのコードスニペットです:
c : TRttiContext;
z : TRttiInstanceType;
w : TRttiProperty;
Aform : Tform;
....
Begin
.....
Aform := Tform(FooClass);
for vCount := 0 to AForm.ComponentCount-1 do begin
vDummyComponent := AForm.Components[vCount];
if IsPublishedProp(vDummyComponent,'Caption') then begin
c := TRttiContext.Create;
try
z := (c.GetType(vDummyComponent.ClassInfo) as TRttiInstanceType);
w := z.GetProperty('Caption');
if w <> nil then
Values[vOffset, 1] := w.GetValue(vDummyComponent.ClassType).AsString
.....
.....
....
....
あらゆる種類のエラーが発生しています。どんな助けでも大歓迎です。