![]() |
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. |
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.
|
AW: panel, disabled und controls
Sinngemäß
Delphi-Quellcode:
usw.
panel1.enabled := false;
edit1aufpanel1.enabled := panel1.enabled; oder findcomponents-Schleife, wie Du schon schriebst. Für sowas bin ich oft noch zu faul, daher also
Delphi-Quellcode:
;-)
panel1.visible := false
|
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
|
AW: panel, disabled und controls
Zitat:
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; |
AW: panel, disabled und controls
Oder so:
Delphi-Quellcode:
[edit]Noch spartanischer:
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;
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; |
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! |
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.
|
AW: panel, disabled und controls
A propos KISS: Die if-Schleife :mrgreen: in CMEnabledChanged kannste dir doch sparen.
|
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 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz