お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"集合型プロパティの設定(改定版)"




  #243のH-Tritonさんの書き込みを書き直したもので、コンポーネントの、集合型の
プロパティを設定するサンプルプログラムです。動作は#243のプログラムとほぼ同じ
なので、比較しながらコードを追ってみてください。

  コンポーネントTPlayingCardがユニットCards 内で次のように定義されているもの
とします。SuitesはTSuites 型のプロパティで、PSuites はSuitesの内部記憶用フィ
ールドです。

----------------------------------------------------------------------------
unit Cards;

interface

uses
  ...;

type
  TSuite = ( csHeart, csDiamonds, csSpade, csClub );
  TSuites = set of TSuite;

  TPlayingCard = class(TComponent)
  private
    { Private 宣言 }
    PSuites: TSuites;
  public
    { Public 宣言 }
    property Suites: TSuites read PSuites write PSuites default [];
  end;

{ 以下略 }

end.
----------------------------------------------------------------------------

  ここで、Form1 内に配置されたTPlayingCard型ののコンポーネントPlayingCard1の
Suitesプロパティを操作することを考えます。
  Form2 にCheckBoxを4つとBitBtnを1つ配置します。BitBtn1 のKindプロパティを
bkOKとし、以下のコードを記述します。
  Form2 内の4つのCheckBoxが、それぞれ4つの要素が集合に含まれるかどうかに相
当します。Form1 で、
    Form2.ShowModal;
というコードを実行してForm2 を表示します。Form2 内の4つのチェックボックスを
操作して[OK]ボタンを押すと、Form1.PlayingCard1のSuitesプロパティが設定されま
す。

----------------------------------------------------------------------------
unit Unit2;

interface

uses
  ...,
  Cards;

type
  TForm2 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    BitBtn1: TBitBtn;     { [OK]ボタン }
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private 宣言 }
    CheckBoxes: array [TSuite] of TCheckBox;
  public
    { Public 宣言 }
  end;

var
  Form2: TForm2;

implementation

uses
  Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
{ コントロール配列に実際のコンポーネントを割り当てる }
begin
  CheckBoxes[csHeart]    := CheckBox1;
  CheckBoxes[csDiamonds] := CheckBox2;
  CheckBoxes[csSpade]    := CheckBox3;
  CheckBoxes[csClub]     := CheckBox4;
end;

procedure TForm2.FormShow(Sender: TObject);
var
  cs: TSuite;
begin
  for cs := csHeart to csClub do begin
    CheckBoxes[cs].Checked := cs in Form1.PlayingCard1.Suites;
  end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
  cs: TSuite;
  tmp: TSuites;
begin
  if ModalResult = mrOK then begin
    tmp := [];
    for cs := csHeart to csClub do begin
      if CheckBoxes[cs].Checked then begin
        tmp := tmp + [cs];
      end;
    end;
    Form1.PlayingCard1.Suites := tmp;
  end;
end;

end.
----------------------------------------------------------------------------

                                                      CQY00603  T. Kawanishi


Original document by T. Kawanishi    氏 ID:(CQY00603)


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

Copyright 1996-2002 Delphi Users' Forum