2016-05-30 4 views
1

TFrameのコンポーネントを継承しています...しかし、私の公開プロパティは.dfmの値を保存しません...エラーは、プロジェクトをリロードする。コンポーネントフレームに私の公開プロパティを保存しないでください

このエラーは次のとおりです。「エラーがMyComponent1.Obsを読ん:プロパティOBSは...存在しません」

TMyComponent = class(TFrame) 
    FObs: string; 
    procedure SetObs(const Value: string); 
published 
    property Obs: string read FObs write SetObs; 
end; 

procedure register; 

implementation 

procedure register; 
begin 
    RegisterComponents('My Components', [TMyComponent]); 
end; 

procedure TMyComponent .SetObs(const Value: string); 
begin 
    if FObs <> Value then 
    FObs := Value; 
end; 
+0

コンポーネントパッケージをIDEにインストールしましたか? –

+0

はい、インストールパッケージですが、上で述べたように、Algarve Propertyの値をdfmに保存しません。たとえば、TFrameの継承をTEditに変更すると、この問題は発生しません。 –

+0

Do notフレームを登録するために別の関数を使用する必要がある –

答えて

1

を、私は、エラーを再現して、それを修正するために管理することはできませんが、しましたそれがどうして起こるのかを正確に理解することは、複雑な方法で動作する視覚的継承と関係しています。

まず、このエラーはプロパティが実際にdfmファイルに保存されたことを示します。ポイントは、いくつかのプロパティがdfmに存在しない場合は完全に正常な状況です。プロパティはデフォルト値(または祖先が持つ値)を持つ必要があることを意味します。

ここでは逆のことが起こります。プロパティ 'obs'はdfmで見つかりましたが、クラス自体には見つかりませんでした。同じことが、私が新しいプロジェクトを作成した後、フレームユニットをプロジェクト自体に追加したときに起こりました。

TMyComponent = class (TFrame) 

、単にTMyComponentを作った:そのクラスTMyComponentがそのラインを発見したプロジェクトに属する「視覚的」単位で記載され、IDEが見つかりました:それは視覚的な継承は、通常の継承の代わりに行われたような場合に、そうです別名TFrame。そのため、エラーが発生しました。TFrameには実際に 'obs'プロパティがありません。

ここに回避策があります。このフレームをプロジェクト自体に追加しないでください。代わりに、コンポーネントパレットからフレームを追加します。このようにして、期待どおりに動作します。 IDEがこのコンポーネントのファイルを見つけることができない場合は、それらを含むフォルダを検索パスに追加します。

関連する問題