Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi panel, disabled und controls (https://www.delphipraxis.net/159348-panel-disabled-und-controls.html)

delphia 24. Mär 2011 11:03

panel, disabled und controls
 
Hallo,

ich habe einige comtrols auf einem panel (TGridPanel). Wenn ich panel.enabled := false setze sind damit auch die controls stillgelegt. So weit, so gut. Wie kann ich es erreichen, dass die controls auch das Aussehen für den disabled Zustand annehmen?

Eigentlich möchte ich nur wissen, ob es möglich ist auf das Ändern der Enabled Eigenschaft des panels zu reagieren? Wenn ja ist der Rest ja kein Problem, in einer Schleife die controls ermitteln und deren enabled Eigenschaft setzen.

Danke.

Jumpy 24. Mär 2011 11:14

AW: panel, disabled und controls
 
Wenn du das Panel im Code disabled wird, kannst du doch an der selben Stelle auch die Elemente darauf disabeln.

vergessen 24. Mär 2011 11:45

AW: panel, disabled und controls
 
Sinngemäß

Delphi-Quellcode:
panel1.enabled := false;
edit1aufpanel1.enabled := panel1.enabled;
usw.

oder findcomponents-Schleife, wie Du schon schriebst.

Für sowas bin ich oft noch zu faul, daher also
Delphi-Quellcode:
panel1.visible := false
;-)

SirThornberry 24. Mär 2011 12:00

AW: panel, disabled und controls
 
Du kannst die Methode SetEnabled des Panels überschreiben und dir somit ein eigenes Event EnabledChanged für das Panel basteln oder eben wenn gewünscht alle children auf enabled=false setzen

Thom 24. Mär 2011 12:34

AW: panel, disabled und controls
 
Zitat:

Zitat von SirThornberry (Beitrag 1090678)
Du kannst die Methode SetEnabled des Panels überschreiben...

Ja, dann müßten aber neue Komponenten abgeleitet und installiert werden - jede Menge Arbeit...

Einfacher geht's, wenn die Nachrichtenverarbeitung des betreffenden Panels überschrieben wird:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  OldWindowProc:=Panel1.WindowProc; //alte Methode merken
  Panel1.WindowProc:=NewWindowProc; //auf neue Methode umleiten
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Panel1.WindowProc:=OldWindowProc; //alte Methode wieder herstellen
end;

procedure TForm1.NewWindowProc(var Message: TMessage);
var
  n: Integer;
begin
  case Message.Msg of
    CM_ENABLEDCHANGED:
    begin
      with Panel1 do
        for n:=0 to ControlCount-1 do
          Controls[n].Enabled:=Enabled; //-> Child-Elemente anpassen
    end;
  end;
  OldWindowProc(Message); //alte Methode aufrufen
end;

DeddyH 24. Mär 2011 12:54

AW: panel, disabled und controls
 
Oder so:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  protected
    procedure WndProc(var Msg: TMessage); override;
  end;

  TForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
  ...

procedure TPanel.WndProc(var Msg: TMessage);
var i: integer;
begin
  if Msg.Msg = CM_ENABLEDCHANGED then
    for i := 0 to ControlCount - 1 do
      Controls[i].Enabled := Enabled;
  inherited;
end;
[edit]Noch spartanischer:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  private
    procedure CMEnabledChanged(var Msg: TMessage); message CM_ENABLEDCHANGED;
  end;

...

procedure TPanel.CMEnabledChanged(var Msg: TMessage);
var i: integer;
begin
  if Msg.Msg = CM_ENABLEDCHANGED then
    for i := 0 to ControlCount - 1 do
      Controls[i].Enabled := Enabled;
  inherited;
end;

vergessen 24. Mär 2011 13:09

AW: panel, disabled und controls
 
Dat vom Thom sieht selbst für einen faulen Sack wie mich ganz gut/bequem nachrüstbar aus!

Mal schaun und Dankeschön für die Anregung! :thumb:

@DeddyH: KISS :oops:

Dank an Euch Beide!

DeddyH 24. Mär 2011 13:24

AW: panel, disabled und controls
 
Wie, KISS? Nichts gegen Thoms Vorschlag, aber das wird etwas unübersichtlich, wenn man mehr als 1 Panel auf diese Art erweitern will.

uligerhardt 24. Mär 2011 13:42

AW: panel, disabled und controls
 
A propos KISS: Die if-Schleife :mrgreen: in CMEnabledChanged kannste dir doch sparen.

DeddyH 24. Mär 2011 13:44

AW: panel, disabled und controls
 
Richtig, die war beim C&P hängengeblieben, schadet aber auch nicht :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz