複数のコンポーネントの同じプロパティを変更する下記のようなプロシジャー処理を関数化する方法を教えてください。
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
if CheckBoxRm001.Checked //ここから
then
begin
CheckBoxRm001.Color := clLime;
end
else
begin
CheckBoxRm001.Color := clBtnFace;
end //ここまで
;
end;
や
procedure TFormSetup.CheckBoxSetCh01Click(Sender: TObject);
begin
if CheckBoxSetCh01.Checked //ここから
then
begin
SpinEditSetCh01.MinValue := 13;
SpinEditSetCh01.MaxValue := 62;
SpinEditSetCh01.Value := 13;
end
else
begin
SpinEditSetCh01.MinValue := 0;
SpinEditSetCh01.MaxValue := 60;
SpinEditSetCh01.Value := 0;
end
; //ここまで
end;
や
procedure TFormSetup.SpinEditSetCh01Change(Sender: TObject);
begin
if SpinEditSetCh01.Value = 0 //ここから
then
EditSetCh01.Text := ' '
; //ここまで
end;
よろしくお願いします。
>procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
>begin
> if CheckBoxRm001.Checked //ここから
> then
> begin
> CheckBoxRm001.Color := clLime;
> end
> else
> begin
> CheckBoxRm001.Color := clBtnFace;
> end //ここまで
> ;
>end;
では、
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
if TCheckBox(Sender).Checked then
TCheckBox(Sender).Color := clLime
else
TCheckBox(Sender).Color := clBtnFace;
end;
のようなことをしたいのですか?
igyさん早速のレスありがとうございます。
したいことは、
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
if CheckBoxRm001.Checked //ここから
then
begin
CheckBoxRm001.Color := clLime;
end
else
begin
CheckBoxRm001.Color := clBtnFace;
end //ここまで
;
end;
・
・
・
・
procedure TFormSetup.CheckBoxRm312Click(Sender: TObject);
begin
if CheckBoxRm312.Checked //ここから
then
begin
CheckBoxRm312.Color := clLime;
end
else
begin
CheckBoxRm312.Color := clBtnFace;
end //ここまで
;
end;
のようにCheckBoxが48個あり、上記のように同じ処理を記述して目的の動作はするのですが、functionにしてcallすればスマートになり、又変更時の対処も容易になるのではと思っています。
アドバイス方よろしくおねがいします。
CheckBoxRm001 の OnClickイベントは、
上で挙げた
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
if TCheckBox(Sender).Checked then
TCheckBox(Sender).Color := clLime
else
TCheckBox(Sender).Color := clBtnFace;
end;
を使い、
(1)コード上から、残りの47個すべてに対し、
CheckBoxRmXXXXX.OnClick = CheckBoxRm001Click;
のように指定するか、
(2)Shift+Clickで残りの47個すべてを選択状態にして、
オブジェクトインスペクタ:イベントの「OnClick」欄で
CheckBoxRm001Clickを選択する。
でどうでしょう?
igyさんのイベント共有が望ましいが、質問にそのまま答えるならコレ
procedure CheckBoxClick(aCheckBox: TCheckBox);
if aCheckBox.Checked //ここから
then
begin
aCheckBox.Color := clLime;
end
else
begin
aCheckBox.Color := clBtnFace;
end //ここまで
;
end;
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
CheckBoxClick(CheckBoxRm001);
end;
もっとも、このような関数化したとしても以下のようにした方がきれいです。
procedure TFormSetup.CheckBoxRm001Click(Sender: TObject);
begin
CheckBoxClick(TCheckBox(Sender));
end;
&
> (1)コード上から、残りの47個すべてに対し、
> CheckBoxRmXXXXX.OnClick = CheckBoxRm001Click;
> のように指定するか、
>
> (2)Shift+Clickで残りの47個すべてを選択状態にして、
> オブジェクトインスペクタ:イベントの「OnClick」欄で
> CheckBoxRm001Clickを選択する。
igyさん、ofZさんご教示ありがとうございました。今後とも何卒よろしくお願いします。
ツイート | ![]() |