いつもお世話になっています。
コンポーネントを作成していますが、定義したレコード型をオブジェクトインスペクタで設定できるようにするには、どうすれば良いのでしょうか。このように宣言してもオブジェクトインスペクタにでできません。
type
DCB = record
・
・
end;
published
property para: DCB read Fpara write Setpara;
検索してみましたが情報が少なく、よくわかりません。よろしくお願いします。
また、コンポーネント作成について、これはおすすめ!と言う本があれば教えて頂けるでしょうか。地方の書店ではdelphiの本なんておいてないです(>_<)。
高くても、少々難しくてもいいので。
クラスにして、その中の要素もプロパティで定義してみてください。
既ににしのさんが答えられていますが補足として
レコードの要素がすべて論理型であるならば、
集合型にしたほうがいいかと、
それ以外はクラスを宣言するのですが、
TPersistentを継承しなければいけません。
>また、コンポーネント作成について、これはおすすめ!と言う本があれば教えて頂けるでしょうか。
本は知らないのですが、VCLを見れば大変参考になります。
もしくはソース付のコンポーネントをダウンロードしてきて、
見てみるのもいいかもしれません。
ヘルプのコンポーネント開発者ガイドにも目を通したほうがいいです。
補足の補足です。
オブジェクトインスペクタで設定したものを、dfmファイルに保存するという機能は、
TPersistentでサポートされている機能です。
(TPersistentのヘルプページにのってます)
で、record型というのは、ただいくつかの変数をまとめたもので、dfmに情報を保存するような機能は持っていません。
なので、オブジェクトインスペクタでプロパティを編集できるものを作るには、
かならずTPersistentを継承したものでなくてはいけないんです。
そして、TPersistentは、フォームに貼り付けるという機能を持っていないので、
TComponentを継承したものを使うということになります。
TPersistentは、主にそのコンポーネントの中で、階層プロパティ(Constraintsプロパティで使われている、TSizeConstraintsみたいなもの)を作るときに使います。
詳しく説明してくださり、ありがとうございます。レコード型ではやはり無理なんですね。
クラスにして、コンポーネントのコンストラクタでcreateすれば無事オブジェクトインスペクタで設定できるようになりました。ありがとうございました。
ツイート | ![]() |