Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Semitransparente Abdeckung eines Grids

  Alt 12. Jan 2012, 12:55
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat