![]() |
AW: Panelreheinfolge einhalten.
Genau das tun die Panels eben nicht tut es eben nicht, das habe ich schon probiert zuvor.
Die Höhe 0 verhindert nicht, dass das Control als solches aktiv weiterlebt. Das ist ein wenig blöd. Man müsste in eine Methode das konkrete Panel reingeben, dann die Controls durchiterieren und den Owner auf den Namen des Panels abfragen. Ganz astrein ist die Methode nicht. Erinnert an eine russische Lösung von weit hinter dem Ural. Aber wenn man den Tabstopp wie zuvor beschrieben abschaltet am versteckten Panel und allen Controls auf die auf demselben angesprungen werden können, dann sollte dieser Hack grad noch durchgehen mit allen Hühneraugen zugedrückt. Zitat:
|
AW: Panelreheinfolge einhalten.
Die Panels bleiben Visible, also nicht Visible:=false; setzen.
Zitat:
|
AW: Panelreheinfolge einhalten.
Oh ja, das sieht gut aus. Werde morgen den Test mit den anderen Panels noch machen. Aber es gibt Hoffnung.
Danke!!! |
AW: Panelreheinfolge einhalten.
Ich würde bei der Gelegenheit noch den Code etwas übersichtlicher machen, und anstelle der Color das Property "Tag" nehmen. Wobei das "Tag" auch keine perfekte Lösung ist :oops:
Delphi-Quellcode:
procedure TFrameArtikel.Panellinksreihenfolge;
procedure AdjustPanel(aPanel: TPanel; aButton: TButton); const PanelHeight: array[boolean] of Integer = (0, 100); begin aPanel.Height := PanelHeight[aButton.Tag = 0]; aPanel.Enabled := aButton.Tag = 0; aPanel.TabStop := aButton.Tag = 0; end; begin AdjustPanel(PanelArtikel, ButtonHaftEtikett); AdjustPanel(PanelDienstleistung, ButtonDienstleistung); . . . usw. |
AW: Panelreheinfolge einhalten.
Delphi-Quellcode:
Die Ausrichtung erfolgt anhand der Z-Order (kann man über
unit Unit2;
interface uses Vcl.Controls; procedure ReAlignChildControls( AParentControl: TWinControl ); implementation uses System.Types; procedure ReAlignChildControls( AParentControl: TWinControl ); var lIdx : Integer; lBounds : TRect; lControl: TControl; begin lBounds := AParentControl.ClientRect; for lIdx := 0 to AParentControl.ControlCount - 1 do begin lControl := AParentControl.Controls[ lIdx ]; if not lControl.Visible then Continue; case lControl.Align of alTop: begin lControl.Top := lBounds.Top; lBounds.Inflate( 0, -lControl.Height, 0, 0 ); end; alBottom: begin lControl.Top := lBounds.Bottom - lControl.Height; lBounds.Inflate( 0, 0, 0, -lControl.Height ); end; alLeft: begin lControl.Left := lBounds.Left; lBounds.Inflate( -lControl.Width, 0, 0, 0 ); end; alRight: begin lControl.Left := lBounds.Right - lControl.Width; lBounds.Inflate( 0, 0, -lControl.Width, 0 ); end; end; end; end; end.
Delphi-Quellcode:
oder
TControl.BringToFront
Delphi-Quellcode:
beeinflussen).
TControl.SendToBack
|
AW: Panelreheinfolge einhalten.
Hallo MichaelT,
also es funktioniert nicht. Wenn ich die Höhe mal auf 0 setze, dann auf die benötigte Grösse, dann bleiben die Panels dort wo ich sie in der Form gesetzt haben. Die sollen jedoch die Position in der richtigen Reihefolge wechseln, je nach dem welche Panel davor sichtbar sind. wenn ich noch die Eigenschalt alTop setze, dann legt mir das Programm die Panels zum Teil übereinander. Werde mir den Vorschlag von Sir Rufo vornehmen und versuchen den zu verstehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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