掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Publish プロパティで、クラス(コンポーネント)を設定したい (ID:25944)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> DefineProperiesでスルーされてるとか? DefinePropertiesをoverrideすれば、 オブジェクトインスペクタで設定した Sub_Comp* の情報を保存できました。 >─── 宣言部 ────── private procedure ReadData(Reader: TReader); procedure WriteData(Writer: TWriter); protected procedure DefineProperties(Filer:TFiler); override; >─── 実装部 ────── // DefinePropertiesのオーバライド procedure DefineProperties(Filer:TFiler); begin inherited; Filer.DefineProperties('Sub_Comp1_BooleanProperty', ReadData, GetData, True); end; // Sub_Comp1のプロパティの読み込み procedure ReadData(Reader: TReader); begin Sub_Comp1.Booleanプロパティ := Reader.ReadBoolean; end; // Sub_Comp1のプロパティの書き込み procedure WriteData(Writer: TWriter); begin Writer.WriteBoolean(Sub_Comp1.Booleanプロパティ); end; >─────────────────────────── しかしこの方法だと、一つのプロパティに付き Sub_Comp*の個数分(8個) × Read&Writeで2つ = 16 16個のメソッドが必要となります。(*1) そのため、以下のような集合型を宣言し type TCompList = (Comp1,Comp2,Comp3,Comp4,Comp5,Comp6,Comp7,Comp8); TCompSet = set of TCompList; 下記のように、publishに集合型のプロパティを宣言することにしました。 publish property Booleanプロパティ : TCompSet read FCompSet型変数 write FCompSet型変数に書き込むメソッド; Default []; > CompSub1がSubComponentとしてエントリされてないから 「SubComponentとしてエントリされていない」とはどういう意味ですか? (*1) 1つのReadData、WriteDataメソッドを共有する方法があるのかも知れませんが、 調べても良い事例がありませんでした。良い方法があれば、どなたか教えてください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.