|
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
|