Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit Panel und Align (https://www.delphipraxis.net/109994-probleme-mit-panel-und-align.html)

DelphiManiac 11. Mär 2008 11:22


Probleme mit Panel und Align
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich nutze in meinem Programm zwei Panels,
einen als obere Leiste und einen als Rechte Leiste.

Leider werden die Panels nicht so angezeigt wie ich mir das denke.

Also Panel1 hat Align=alTop und Panel2 hat Align=alRight
nun ist es aber so, dass der Panel1 von Links oben bis rechts oben durchgängig ist und mein Panel2 auf der rechten Seite
nicht bis oben geht, ich würde aber es gerne anders herum haben.
(habe mal einen Screenshot angehängt)

Evtl wisst ihr ja wie man da die Prioriät ändern kann.

Danke euch

taaktaak 11. Mär 2008 11:39

Re: Probleme mit Panel und Align
 
Moin, Moin,
vermutlich funktioniert es, wenn du die beiden Panels in der umgekehrten Reihenfolge placierst. Erst Panel2 mit Align=top,bottom und right, dann das Panel1

s-off 11. Mär 2008 11:41

Re: Probleme mit Panel und Align
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:

Zitat von taaktaak
Moin, Moin,
vermutlich funktioniert es, wenn du die beiden Panels in der umgekehrten Reihenfolge placierst. Erst Panel2 mit Align=top,bottom und right, dann das Panel1

nein, das funktioniert leider nicht.

Nutze ein drittes Panel, wenn sich keine andere Lösung finden sollte.

Panel1 => alRight
Panel3 => alClient mit BevelOuter => bvNone
Panel2 => alTop mit Parent => Panel3

Edit1: Kommentar zu taaktaak
Edit2: Screenshot

OregonGhost 11. Mär 2008 11:51

Re: Probleme mit Panel und Align
 
taaktaak hat schon recht. Die von dir genannte "Priorität" ist die Z-Reihenfolge der Controls. In Visual Studio hilft dazu ein profanes "In den Vordergrund". Ich weiß nicht, wie genau man das in Delphi macht. Das Prinzip ist aber dasselbe.

s-off 11. Mär 2008 12:00

Re: Probleme mit Panel und Align
 
Zitat:

Zitat von OregonGhost
taaktaak hat schon recht.

Die Aussage finde ich lustig; wie kann man recht haben, wenn es dann doch nicht funktioniert?
Du kannst VS nicht mir der Delphi-IDE vergleichen.

Ich habe alles ausprobiert, was die Reihenfolge anbelangt; sowohl zur Designtime als auch zur Runtime.
Auch 'Element -> Nach vorne setzen' hilft nicht.

taaktaak 11. Mär 2008 12:00

Re: Probleme mit Panel und Align
 
Jepp, mein Beitrag ist aber trotzdem nicht die Lösung :oops: Die Vorgehensweise von s-off führt zum Erfolg

s-off 11. Mär 2008 12:02

Re: Probleme mit Panel und Align
 
Zitat:

Zitat von taaktaak
Jepp, mein Beitrag ist aber trotzdem nicht die Lösung :oops: Die Vorgehensweise von s-off führt zum Erfolg

Mach Dir nichts draus - ich hatte zuerst das Gleiche im Sinn ;)

Aber dennoch macht es mich stutzig, dass es keine ordentliche Lösung gibt.

Mein Ansatz ist zwar eine Lösung, aber wohl eher eine dahingefrickelte Umgehungslösung :?

vsti 11. Mär 2008 12:17

Re: Probleme mit Panel und Align
 
Hat mich auch schonmal generft, folgendermaßen "gelöst".

Einfach ein zusätzliches Panel:
- Panel1 -> alRight
- Panel2 -> alClient
- auf Panel2 ein Panel3 -> alTop

ups... schon genannt...

Edit: erst lesen dan schreiben -.-

Blubbels 18. Nov 2009 09:02

Re: Probleme mit Panel und Align
 
Ich (Delphi 2006) kämpfe gerade mit demselben Problem - mit dem Unterschied, daß es A. in einer nicht mehr praktikablen Kombination bereits anders klappte, und B. der Workaround hier auch nicht zutrifft.

Grob gesehen habe ich die gleiche Situation: eine linke Leiste, eine Kopfzeile oben, eine Fusszeile unten.

Da ich hier dieselbe Struktur allerdings in einem Dutzend Fenstern habe, verwende ich dafür eine eigene Klasse, die ich in der Formular-Unit in die Deklaration des Formulars einsetze. Dann erzeuge ich im constructor Create dieser Klasse die Panels. Ein Extra-Panel für den "rechten" Bereich (alClient) ist also nicht möglich, da zwischen den drei Panels beliebiges im Form-Konstruktor unbekanntes liegen kann.

Funktioniert hat es übrigens, als nur das linke Panel in meiner eigenen Formularoberklasse erzeugt wurde, und Kopf und Fuß im Formular selber waren - da hatte es die volle Höhe. Nur habe ich diese natürlich im Zuge der Vereinheitlichung auch verschoben, identisch aussehende Panels überall einzeln zu haben ist ja auch nicht das wahre...
Möglich ist es also, nur wie?

Ein einfaches FPanelLeft.SetZOrder(true) aka BringToFront oder SetZOrder(false) aka SendToBack, auch mit folgendem Self.Realign bringt nichts.

Sailor 18. Nov 2009 13:38

Re: Probleme mit Panel und Align
 
Versuch's mal so:

1. Linkes Panel mit Align = alLeft

2. Oberes Panel mit Anchors = [akLeft,akTop,akRight],
Plazieren des Panels direkt neben das linke Panel

3. Wenn die Position von Komponenten auf dem oberen Panel
in Abhängigkeit von dessen Breite geändert werden soll,
dann das Ganze in der Resize-Prozedur der Elternkomponente
erledigen

Blubbels 18. Nov 2009 15:40

Re: Probleme mit Panel und Align
 
An Anchors hatte ich auch für einen kurzen Moment gedacht, allerdings "blockt" das ganze ja nicht mehr. Die spezifischen Formulare haben aber meistens dann den "Hauptteil" des Fensters als Align = alClient, das würde dann überlappen.

Genauso wenig AlignWithMargins mit Margins.Left := 200 - dadurch wächst der linke Balken leider auch nicht auf die volle Höhe.

Ein böser Workaround wäre, die Controls.pas zu bearbeiten; bei Delphi 2006 in Zeile 6408 ff. das DoAlign(alLeft); nach ganz oben zu setzen.

Ich denke der Schlüssel ist, daß beim Laden durch TReader (also von Design-Time-Komponenten) noch etwas minimal anders ist.

uligerhardt 18. Nov 2009 15:58

Re: Probleme mit Panel und Align
 
Irgendwann hat Borland mal Delphi-Referenz durchsuchenalCustom eingeführt, das wohl für solche Fälle gedacht war, aber seitdem AFAICS ein Schattendasein führt. Trotzdem: schaut euch mal Demo2 von hier an. Vielleicht gefällt's euch ja.

Blubbels 26. Nov 2009 11:00

Re: Probleme mit Panel und Align
 
Vielen Dank für den Hinweis :)

Hatte das alCustom zwar mal gelesen, aber nicht weit genug gedacht; das Problem war dabei für mich, daß es eben nicht die der Klasse nicht bekannten "inneren" Elemente verschiebt. Aber wenn ich alle 4 Rahmenelemente (Statusleiste, Navigation links, Kopf oben, Fußkrams unten) per alCustom plaziere, kann ich in der Form per Self.Padding die Ränder entsprechend anpassen und visuell ist das Ergebnis das Richtige :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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