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;
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するところです。
Panelに乗ている全てのコントロールのEnabledをFalseにしたいのであれば、
Panel := false;
とすれば、Panelに乗っているもの全てが使用できなくなります。
間違えました。
Panel.Enabled := False;
でした。
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;
皆様のおかげで無事解決しました。
やりたい事が分かっても実現方法までなかなか辿り着けずもどかしいです・・・
ありがとう御座いました。
ツイート | ![]() |