お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"オブジェクト型プロパティ"




{
オブジェクトインスペクタで「+」の部分をダブルクリックするとプロパ
ティリストを展開してそれらを編集できるオブジェクト型プロパティのサ
ンプルコード。

・プロパティにするオブジェクトはTPersistentを継承する。
・オブジェクトに持たせるプロパティはPublised宣言する。
}

unit TestCompo1;

interface

uses
  Windows, Messages, SysUtils, Classes;

type
  TSex = (sxMale, sxFemale);

  TPersonalData = class(TPersistent) // プロパティにする
  private                            // オブジェクトのクラス宣言
    FName: string;       // 名前
    FAge: Integer;       // 年齢
    FSex: TSex;          // 性別
    FMarried: Boolean;   // 既婚かどうか?
    procedure SetAge(const Value: Integer);
    procedure SetMarried(const Value: Boolean);
    procedure SetName(const Value: string);
    procedure SetSex(const Value: TSex);
  public

  published
    property Name: string read FName write SetName;
    property Age: Integer read FAge write SetAge;
    property Sex: TSex read FSex write SetSex;
    property Married: Boolean read FMarried write SetMarried;
  end;

  TTestCompo = class(TComponent)   // コンポーネントのクラス宣言
  private
    { Private 宣言 }
    FPersonalData: TPersonalData;
    procedure SetPersonalData(const Value: TPersonalData);
  protected
    { Protected 宣言 }
  public
    { Public 宣言 }
    constructor Create( AOwner : TComponent ); override;
    destructor  Destroy; override;
  published
    { Published 宣言 }
    property PersonalData: TPersonalData read FPersonalData write SetPersonalData;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TTestCompo]);
end;

{ TPersonalData}
// プロパティアクセスメソッド(書込用)のみ実装しています。
procedure TPersonalData.SetAge(const Value: Integer);
begin
  if Value <> FAge then FAge := Value;
end;

procedure TPersonalData.SetMarried(const Value: Boolean);
begin
  if Value <> FMarried then FMarried := Value;
end;

procedure TPersonalData.SetName(const Value: string);
begin
  if Value <> FName then FName := Value;
end;

procedure TPersonalData.SetSex(const Value: TSex);
begin
  if Value <> FSex then FSex := Value;
end;

{ TTestCompo }
// オブジェクト型プロパティの作成
constructor TTestCompo.Create(AOwner: TComponent);
begin
  inherited Create( AOwner );
  FPersonalData:= TPersonalData.Create;
end;
// オブジェクト型プロパティの破棄
destructor TTestCompo.Destroy;
begin
  FPersonalData.Free;
  inherited Destroy;
end;
// オブジェクト型プロパティへのアクセスメソッド(書込用)
procedure TTestCompo.SetPersonalData(const Value: TPersonalData);
begin
  FPersonalData.Assign(Value);
end;

end.


           ○ 心を打つ美しい文書作りは「えるの〜と」 ○
                 http://member.nifty.ne.jp/h-triton/
        Avalon's Friendly Crew #80008  H-Triton (^^) since 1996

Original document by H-Triton        氏 ID:(QZV11422)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum