6

私はプロパティ インスペクタ (たとえば、JVCL ライブラリの便利な JvInspector ) を使用しています。これにより、クラス 'TMyClass' の公開されたプロパティを適切に表示および編集できます。TMyClassから派生しTFrame、表示および編集する必要がある唯一の公開されたプロパティがいくつかあります。もちろんTFrame、多くの VCL プロパティがあり、すべて公開されています。

祖先プロパティの RTTI を抑制し、自分の公開済みプロパティを残すにはどうすればよいですか? 私は XE3 を使用しているので、世界は私のカキです... たぶん。

4

3 に答える 3

8

からクラスを派生させ、クラスからTCustomFrame必要なプロパティのみを公開します。基本的に、公開済みのプロパティを非表示にすることはできませんが、多くのプロパティは保護されており、TCustomFrameクラスを独自のクラスの祖先として使用することで非表示のままになります。

これが、VCL のほぼすべてのコントロールがクラス階層で構成されている方法です。たとえば、クラス チェーンでの唯一の役割は、オブジェクト インスペクタで確認できるプロパティを公開する子孫ですTLabelTCustomLabel

于 2013-01-24T14:20:17.187 に答える
4

FWIW、これに対する RTTI ソリューションを見つけました。つまり、祖先クラスに属さないプロパティ、つまり、現在のクラスに自分で追加、公開したプロパティのみを許可します。JvInspector にはBeforeItemCreate、インスペクターに表示されるプロパティの名前を含むイベントがあります。このソリューションは、プロパティ名が祖先クラスのメンバーであるかどうかをテストし、そうでない場合にのみインスペクターに表示します。利点は、インスペクター コードに変更がないことです。

uses
  TypInfo;

procedure TForm1.JvInspectorBeforeItemCreate(Sender: TObject; 
  Data: TJvCustomInspectorData; var ItemClass: TJvInspectorItemClass);
begin
  if IsPublishedProp(TFrame, Data.Name) then
    ItemClass := nil;
end;
于 2013-01-26T16:38:39.557 に答える
3

TMyClass実行時にコンポーネント/フレームを作成します。


ただし、設計時にもプロパティを編集できるようにするために、TMyClassから派生しないでくださいTFrame。代わりに、次から派生します。

  • TCustomPanel境界線が必要な場合は、
  • TCustomControl自分で境界線を引くことができれば、
  • TWinControl国境なしでできるなら。

もちろん、TMyClassコンポーネントはフレームの挿入ダイアログに表示されなくなりますが、他のコンポーネントと同様に単なるコンポーネントになります。

于 2013-01-27T09:22:07.893 に答える