Panel上の全てのコントロールをロックするには?

解決


うさ  2003-08-20 04:54:08  No: 4426

Panel上の全てのコントロールのEnabledをFalseにしたいのですが、
Panelには、GroupBoxがありその配下に複数のCheckBoxが含まれています。
個々のCheckBoxのEnabledもFalseにしたいのです。
下記の方法だと、GroupBox配下のCheckBoxのEnabledをFalseにする事が
出来ません。
Panel上の全てを対象とするよい方法はないでしょうか?
ご教授下さいませ。

procedure TForm1.pnl2Click(Sender: TObject);
begin
   pnlLock(form1.pnl2);
end;

procedure TForm1.pnlLock(pnl:TPanel);
var i:Integer;
begin
    for i:=0 to pnl.ControlCount-1 do
    begin
        pnl.Controls[i].Enabled := False;
    end;
end;


にしの  2003-08-20 05:38:55  No: 4427

procedure TForm1.ctlLock(ctl:TControl);
var i:Integer;
begin
  for i:=0 to ctl.ControlCount-1 do
  begin
    ctlLock(ctl.Controls[i]);
    ctl.Enabled := False;
  end;
end;

これでどうでしょう。
未確認なので、コンパイルが通らないかもしれませんが、肝はControls配列内のコントロールに対しても、それらの持つコントロールをDisableするところです。


平蔵  2003-08-20 05:40:17  No: 4428

Panelに乗ている全てのコントロールのEnabledをFalseにしたいのであれば、
Panel := false;
とすれば、Panelに乗っているもの全てが使用できなくなります。


平蔵  2003-08-20 05:42:07  No: 4429

間違えました。
Panel.Enabled := False;
でした。


Halbow  URL  2003-08-20 06:12:12  No: 4430

Halbow です。

> Panel.Enabled := False;

これでも実際上はいいのですが、視覚上の効果がありませんよね。

にしのさんの提案を完成させました。再帰呼び出しですね。

procedure TForm1.Button2Click(Sender: TObject);
begin
  WinLock(Panel1);
end;

procedure TForm1.WinLock(WC:TWinControl);
var
  i:integer;
  CC:TControl;
begin
  if WC.ControlCount = 0 then exit;
  for i:=0 to WC.ControlCount-1 do begin
    CC := WC.Controls[i];
    CC.Enabled := false;
    if CC is TWinControl then WinLock(TWinControl(CC));
  end;
end;


うさ  2003-08-21 00:57:03  No: 4431

皆様のおかげで無事解決しました。
やりたい事が分かっても実現方法までなかなか辿り着けずもどかしいです・・・
ありがとう御座いました。


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

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






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