![]() |
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:
|
AW: panel, disabled und controls
@DeddyH:
Böser Trick... 8-) Danke: Wieder etwas gelernt! :thumb: |
AW: panel, disabled und controls
Dieser Trick lohnt sich aber wirklich nur in Sonderfällen, ansonsten wäre eine abgeleitete Komponente wahrscheinlich der bessere Weg.
|
AW: panel, disabled und controls
Zitat:
In meinen Programmen steuere ich fast alles über eine TActionList, deren Aktionen.OnUpdate jeweils einige Bedingungen überprüfen. Sourcecode-"Minimierung/Optimierung" (a la Himitsu) ist NICHT mein Ziel. Optimierung hin oder her: Wenn ich's nicht kapiere, wird's nicht übernommen, da ich in vier Wochen noch nachvollziehen können möchte, was ich vor vier Wochen gemacht habe 8-) Sorry für OT |
AW: panel, disabled und controls
@Thom,
@DeddyH so etwas habe ich gesucht, funktioniert prima. Sicher hätte man auch ein procedure schreiben können, die controls und panel entsprechend einstellt. Halte das aber für die sicherere, weil immer greifend wenn enabled geändert wird, und elegantere Methode (Stil). Denke diese Vorgehensweise wird mir auch in anderen Situationen helfen. Danke dafür. |
AW: panel, disabled und controls
Gerade erst gesehen:
![]() Vielleicht wird es nach der Lektüre klarer, was ich da tue, denn genau das ist in dem Artikel beschrieben. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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