Hab ich nun gerade mal ausprobiert. Funktioniert an sich schon, nur wenn mein Bereich der abgedeckt wird z.B. einen Button enthält, so wird dieser nicht abgedeckt (obwohl er ja in dem Fall gar nicht benutzbar sein sollte). Oder wenn ich ein Tabsheet abdecken will, das ein Grid enthält, so wird zwar das Sheet abgedeckt, aber nicht das Grid selbst.
Ich bin dabei immer so vorgegangen, daß ich den Parent des Images auf das abzudeckende Control gesetzt hab mit Align = alClient.
Stimmt, hab ich auch gerade mal ausprobiert.
Aber evtl reicht es Dir ja schon, wenn Du "nur" alle Componenten des Containers enabled auf False setzt. Das ist ja mit einer einfachen For Schleife erledigt.
Hier ein kleines Beispiel.
Einfach ein Form mit einem Panel mit folgenden Imhalt: Button, Editfeld, RadioButton, Grid, ...
Dann eine CheckBox1 auf das Form1 legen und folgenden Code einfügen.
Das Panel1 inkl. aller enthaltener Komponenten werden Enabled False/True und jeweils ausgegraut.
Man könnte auch noch ein Color in der proc setzen oder einzelne Komponenten gesondert behandeln...
Delphi-Quellcode:
procedure CompEnabler(pForm: TCustomForm; pComp: TControl; pEnabled: Boolean);
var
i: Integer;
// optional
const
EnabledColor: array[Boolean] of TColor = (clBtnFace, clWindow);
// --optional
begin
for i := 0 to pForm.ComponentCount-1 do
begin
if pForm.Components[i] is TControl then
begin
if ((pForm.Components[i] as TControl).Parent = pComp)
or (pForm.Components[i] = pComp) then
begin
(pForm.Components[i] as TControl).Enabled := pEnabled;
// optional
if (pForm.Components[i] is TEdit) then
begin
(pForm.Components[i] as TEdit).Color := EnabledColor[pEnabled];
end;
// --optional
end;
end;
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
CompEnabler(Form1, Panel1, CheckBox1.Checked);
end;
Ich hoffe das hilft Dir.