レコード型をオブジェクトインスペクタで設定するには

解決


pain  2003-01-15 10:43:04  No: 2597

いつもお世話になっています。
コンポーネントを作成していますが、定義したレコード型をオブジェクトインスペクタで設定できるようにするには、どうすれば良いのでしょうか。このように宣言してもオブジェクトインスペクタにでできません。
type
    DCB = record
        ・
        ・
    end;
published
    property para: DCB read Fpara write Setpara;
検索してみましたが情報が少なく、よくわかりません。よろしくお願いします。

また、コンポーネント作成について、これはおすすめ!と言う本があれば教えて頂けるでしょうか。地方の書店ではdelphiの本なんておいてないです(>_<)。
高くても、少々難しくてもいいので。


にしの  2003-01-15 19:36:30  No: 2598

クラスにして、その中の要素もプロパティで定義してみてください。


Basser  2003-01-15 20:17:44  No: 2599

既ににしのさんが答えられていますが補足として
レコードの要素がすべて論理型であるならば、
集合型にしたほうがいいかと、
それ以外はクラスを宣言するのですが、
TPersistentを継承しなければいけません。

>また、コンポーネント作成について、これはおすすめ!と言う本があれば教えて頂けるでしょうか。

本は知らないのですが、VCLを見れば大変参考になります。
もしくはソース付のコンポーネントをダウンロードしてきて、
見てみるのもいいかもしれません。
ヘルプのコンポーネント開発者ガイドにも目を通したほうがいいです。


たかみちえ  URL  2003-01-16 01:15:41  No: 2600

補足の補足です。
オブジェクトインスペクタで設定したものを、dfmファイルに保存するという機能は、
TPersistentでサポートされている機能です。
(TPersistentのヘルプページにのってます)
  で、record型というのは、ただいくつかの変数をまとめたもので、dfmに情報を保存するような機能は持っていません。
  なので、オブジェクトインスペクタでプロパティを編集できるものを作るには、
かならずTPersistentを継承したものでなくてはいけないんです。

  そして、TPersistentは、フォームに貼り付けるという機能を持っていないので、
TComponentを継承したものを使うということになります。
  TPersistentは、主にそのコンポーネントの中で、階層プロパティ(Constraintsプロパティで使われている、TSizeConstraintsみたいなもの)を作るときに使います。


pain  2003-01-16 23:20:38  No: 2601

詳しく説明してくださり、ありがとうございます。レコード型ではやはり無理なんですね。
クラスにして、コンポーネントのコンストラクタでcreateすれば無事オブジェクトインスペクタで設定できるようになりました。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加