下記のようなCheckBoxをクリックしてSpinEditのプロパティを更新するもので、CheckBoxが24個貼り付けられています。//ここから.....//ここまで、を手続または関数化したいのですが・・・!!
アドバイスよろしくお願いします。
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.CheckBoxSetCh24Click(Sender: TObject);
begin
if CheckBoxSetCh24.Checked //ここから
then
begin
SpinEditSetCh24.MinValue := 13;
SpinEditSetCh24.MaxValue := 62;
SpinEditSetCh24.Value := 13;
end
else
begin
SpinEditSetCh24.MinValue := 0;
SpinEditSetCh24.MaxValue := 60;
SpinEditSetCh24.Value := 0;
end
; //ここまで
end;
まあひとつの方法としてTagを使うかな・・・
CheckBoxとSpinEditのTagに関連性を持たせる値を設定してから
procedure XXXXX.ChkBoxClick(Sender :TObject);//CheckBoxのOnClickの共有
var
Ret :Integer;
bFlg :Boolean;
bwgin
bFlg := (Sender as TCheckBox).Checked;
Ret := (Sender as TCheckBox).Tag;
SetEdit(Ret,bFlg);
end;
procedure XXXX.SetEdit(ATag :Integer;AFlg :Boolean);
var
i :Integer;
begin
for i := 0 to Self.ComponentCount.Count -1 do
begin
if Self.Components[i] is TSpinEdit then
begin
if (Self.Components[i] as TSpinEdit).Tag = ATag then
begin
if AFlg then
begin
(Self.Components[i] as TSpinEdit).MinValue := XXX;
・・・・
end else begin
・・・・
end;
Break;
end;
end;
end;
end;
ちなみに、目くら打ちなのでスペル間違ってるかもしれません。
まあ、こんなイメージで如何でしょうか?
もう間違ってるし、すいません。
>for i := 0 to Self.ComponentCount.Count -1 do
for i := 0 to Self.ComponentCount -1 do
「確かめよう、送信前の、我が記述」・・・赤面m(__)m
procedure TFormSetup.CheckBoxSetCh01Click(Sender: TObject);
begin
SetCheckSpineEdit(CheckBoxSetCh01.Checked, SpinEditSetCh01);
end;
procedure TFormSetup.CheckBoxSetCh24Click(Sender: TObject);
begin
SetCheckSpineEdit(CheckBoxSetCh24.Checked, SpinEditSetCh24);
end;
procedure SetCheckSpineEdit(Check: Boolean; SpinEdit: TSpinEdit);
begin
if Check then
begin
SpinEdit.MinValue := 13;
SpinEdit.MaxValue := 62;
SpinEdit.Value := 13;
end else
begin
SpinEdit.MinValue := 0;
SpinEdit.MaxValue := 60;
SpinEdit.Value := 0;
end;
end;
こんな程度の結合でいいんじゃない?
CheckBoxとSpinEditの対応付けは
ソースコードにイベントハンドラで書いておく程度でいいわけで。
Syakeさん、Fusaさんアドバイスありがとうございました。
今後ともよろしくお願いします。
https://www.petitmonte.com/bbs/answers?question_id=4231
この質問との違いは何?
終わってますが
//イベントを共有して
procedure TFormSetup.CheckBoxSetCh01Click(Sender: TObject);
var
s: string;
begin
s := RightStr((Sender as TCheckBox).Name), 2);
sp := FindComponent('SpinEditSetCh' + s) as TSpinEdit;
if sp <> nil then begin
if (Sender as TCheckBox).Checked then begin
sp.MinValue := 13;
sp.MaxValue := 62;
sp.Value := 13;
else begin
sp.MinValue := 0;
sp.MaxValue := 60;
sp.Value := 0;
end;
end;
end;
手元に環境がないので動作確認はしていません。
'ところで'さんレスありがとうございます。初心者ですので記述でご不調を...すみません。教えてくださいの、これからはあれもこれもではなく「この処理をするには!!」にしますので今後ともよろしくお願いします。
質問の答えになってない・・・YO!
> 「この処理をするには!!」にします
じゃなく、同じ内容のことを繰り返しているとは思いませんか?
って言いたかったわけ。
これもむこうも、ボタンのクリックとか、チェックボックスのチェックの
オン・オフ時に実行する処理を共通化したいわけでしょう?
仮にそういうことじゃなくても、「関数化したい」という点では、
むこうではofZさんがきっちり回答を残してくださっています。
でも、こちらも「関数化したい」ってことでしょう?
だから同じ質問じゃないの?違いは何?って聞いたわけだ。
とりあえず、誰の案をつかって解決したかぐらい書いても損じゃない。
むしろ書かない方が損だけどな。
ツイート | ![]() |