AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

panel, disabled und controls

Ein Thema von delphia · begonnen am 24. Mär 2011 · letzter Beitrag vom 25. Mär 2011
Antwort Antwort
delphia

Registriert seit: 23. Aug 2010
22 Beiträge
 
Delphi 2010 Professional
 
#1

panel, disabled und controls

  Alt 24. Mär 2011, 11:03
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.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: panel, disabled und controls

  Alt 24. Mär 2011, 11:14
Wenn du das Panel im Code disabled wird, kannst du doch an der selben Stelle auch die Elemente darauf disabeln.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von vergessen
vergessen

Registriert seit: 29. Jun 2010
85 Beiträge
 
Delphi 5 Professional
 
#3

AW: panel, disabled und controls

  Alt 24. Mär 2011, 11:45
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 panel1.visible := false
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: panel, disabled und controls

  Alt 24. Mär 2011, 12:00
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#5

AW: panel, disabled und controls

  Alt 24. Mär 2011, 12:34
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;
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#6

AW: panel, disabled und controls

  Alt 24. Mär 2011, 12:54
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (24. Mär 2011 um 12:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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