SpinEditの同じプロパティの更新について

解決


Msun  2006-09-20 16:37:38  No: 23302

下記のような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;


Syake  2006-09-20 16:58:08  No: 23303

まあひとつの方法として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;
ちなみに、目くら打ちなのでスペル間違ってるかもしれません。
まあ、こんなイメージで如何でしょうか?


Syake  2006-09-20 17:07:05  No: 23304

もう間違ってるし、すいません。
>for i := 0 to Self.ComponentCount.Count -1 do
for i := 0 to Self.ComponentCount -1 do
「確かめよう、送信前の、我が記述」・・・赤面m(__)m


Fusa  2006-09-20 23:39:31  No: 23305

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の対応付けは
ソースコードにイベントハンドラで書いておく程度でいいわけで。


Msun  2006-09-21 16:26:01  No: 23306

Syakeさん、Fusaさんアドバイスありがとうございました。
今後ともよろしくお願いします。


ところで  2006-09-21 21:57:54  No: 23307

https://www.petitmonte.com/bbs/answers?question_id=4231

この質問との違いは何?


sk  2006-09-22 01:24:27  No: 23308

終わってますが
//イベントを共有して
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;

手元に環境がないので動作確認はしていません。


Msun  2006-09-24 00:48:28  No: 23309

'ところで'さんレスありがとうございます。初心者ですので記述でご不調を...すみません。教えてくださいの、これからはあれもこれもではなく「この処理をするには!!」にしますので今後ともよろしくお願いします。


ところで  2006-09-24 22:13:00  No: 23310

質問の答えになってない・・・YO!

> 「この処理をするには!!」にします
じゃなく、同じ内容のことを繰り返しているとは思いませんか?
って言いたかったわけ。

これもむこうも、ボタンのクリックとか、チェックボックスのチェックの
オン・オフ時に実行する処理を共通化したいわけでしょう?
仮にそういうことじゃなくても、「関数化したい」という点では、
むこうではofZさんがきっちり回答を残してくださっています。

でも、こちらも「関数化したい」ってことでしょう?
だから同じ質問じゃないの?違いは何?って聞いたわけだ。

とりあえず、誰の案をつかって解決したかぐらい書いても損じゃない。
むしろ書かない方が損だけどな。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加