![]() |
Alle Child-Komponenten deaktivieren
Hallo,
wie kann ich alle enthaltenen Komponenten einer GroupBox deaktivieren? So in der Art:
Delphi-Quellcode:
oder so ähnlich!?
GroupBox.ChildControls.enable:= false;
Danke! |
Re: Alle Child-Komponenten deaktivieren
Das geht leider nicht:
Delphi-Quellcode:
Also entweder einzeln oder über
Groupbox1.Enabled := False;
![]() |
Re: Alle Child-Komponenten deaktivieren
Hallo Luckie,
das hatte ich vermutet. Schade! Dann einzeln. Danke dir! |
Re: Alle Child-Komponenten deaktivieren
Imho sind die automatisch mit der Groupbox deaktiviert, nur leider stellen die sich nicht als deaktiviert dar :?
...:cat:... |
Re: Alle Child-Komponenten deaktivieren
Zitat:
... Jetzt habe ich es und es stimmt. Das ganze auf ein Panel legen bringt auch nichts. |
Re: Alle Child-Komponenten deaktivieren
Zitat:
Hier der Code
Delphi-Quellcode:
Alles weitere auf der Seite:
unit uRealPanel;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TRealPanel = class(TPanel) private protected procedure SetEnabled(Value: Boolean); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('gate(n)etwork', [TRealPanel]); end; { TRealPanel } procedure TRealPanel.SetEnabled(Value: Boolean); var I: Integer; begin inherited; if csDesigning in ComponentState then Exit; for I := 0 to Pred(ControlCount) do if Controls[I] is TWinControl then (Controls[I] as TWinControl).Enabled := Value; end; end. ![]() ...:cat:... |
Re: Alle Child-Komponenten deaktivieren
Hallo barnti,
bei der TGroupBox handelt es sich um einen Erben von TWinControl, der über die Eigenschaften Controls und ControlCount die ihm untergeordneten Elemente veröffentlicht. Du könntest, um Dein Problem zu lösen, über alle untergeordneten Element iterieren und für diese jeweils die Eigenschaften setzen. Solltest Du jedoch mehrere solcher Boxen (zB auch Panels) inneinander verschachteln, könnte ein rekursiver Ansatz weiterhelfen. Die folgende Prozedure demonstriert, was ich meine (und sollte ggf an Deine Bedürfnisse weiter angepasst werden):
Delphi-Quellcode:
mit einem Aufruf der Art:
procedure SetEnabledRecursivly(AControl: TControl; AEnabled: Boolean);
var iChild: Integer; begin // set state of control AControl.Enabled := AEnabled; // if control contains further controls... if (AControl is TWinControl) then with TWinControl(AControl) do // ...set state for each child (recursive) for iChild := 0 to Pred(ControlCount) do SetEnabledRecursivly(Controls[iChild], AEnabled); end;
Delphi-Quellcode:
EDIT: Ups, etwas zu langsam ;)
SetEnabledRecursivly(GroupBox1, False);
|
Re: Alle Child-Komponenten deaktivieren
Hallo ihr alle,
ich habe die ganze Box deaktiviert. Wie schon erwähnt stellen sich die beinhalteten Komponenten aber nicht deaktiviert da. Ich werde mir mal überlegen wie ich das löse oder ob das so ok ist... Danke an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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