![]() |
Anchor macht kompletten Nonsense!
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin über ein wirklich seltsames Problem gestossen.
Wird in der Delphi-IDE die Visisbility-Eigenschaft von einem Panel, dass den Anchor einer anderen beeinflusst auf False gesetzt, dann schlägt die Anchor-Gschichte fehl. hmmm... das klingt sehr konfus. Hier ein komplett primitives Beispiel. Auf ein Form copy-pasten, starten und wundern.
Delphi-Quellcode:
Ich häng auch noch einen Screenshot an. Oben das Formular in der IDE, unten nach dem starten. Normalerweise sollte das obere Panel weg sein (das passt ja) und das Memo durch seine Anchor-Settings auf allen Seiten nur einen schmalen Rand zum Formular halten. Fail!!!
object Panel1: TPanel
Left = 0 Top = 0 Width = 643 Height = 113 Align = alTop Caption = 'Panel1' TabOrder = 0 Visible = False end object Panel2: TPanel Left = 0 Top = 113 Width = 643 Height = 228 Align = alClient Caption = 'Panel2' TabOrder = 1 object Memo1: TMemo Left = 8 Top = 6 Width = 625 Height = 211 Anchors = [akLeft, akTop, akRight, akBottom] Lines.Strings = ( 'Memo1') TabOrder = 0 end end |
AW: Anchor macht kompletten Nonsense!
Du könntest beim Memo alClient und AlignWithMargins benutzt. Ändert nix am Verhalten, aber immerhin sieht dann dein Form aus wie du es möchtest :D
|
AW: Anchor macht kompletten Nonsense!
Das geht leider nicht, auf dem Formular ist noch VIEL mehr drauf, das hier ist nur ein möglichst einfaches Form, dass den Fehler schön demonstriert.
Btw: Ein Workaround ist z.B. Panel1.Visible erst im OnCreate auf False zu setzen. Das ändert aber nichts daran, dass Delphi an einer simplen Grundfunktionalität scheitert :( Zitat:
|
AW: Anchor macht kompletten Nonsense!
Anchors und Align vertragen sich schon seit Äonen nicht. Dafür gibts seit einigen Versionen die AlignWithMargins Property:
Delphi-Quellcode:
object Panel1: TPanel
Left = 0 Top = 0 Width = 562 Height = 113 Align = alTop Caption = 'Panel1' TabOrder = 0 Visible = False end object Panel2: TPanel Left = 0 Top = 113 Width = 562 Height = 188 Align = alClient Caption = 'Panel2' TabOrder = 1 object Memo1: TMemo AlignWithMargins = True Left = 4 Top = 4 Width = 554 Height = 180 Align = alClient Lines.Strings = ( 'Memo1') TabOrder = 0 end end |
AW: Anchor macht kompletten Nonsense!
Hallo Ralfiii,
was erwartest du? Dein Panel2 steht auf alClient, also muss es den kompletten Raum des Formulars ausfüllen, wenn Panel1 nicht sichtbar ist, oder? Wenn du in dem Zustand dann Panel1 sichtbar machst, liegt es hinter dem Panel2. Abhilfe:
Delphi-Quellcode:
Ich würde es mir auch anders wünschen, aber ich sehe das von dir beschriebene Verhalten durchaus als ein MÖGLICHES Verhalten.
Panel2.Align := alNone;
Panel1.Visible := True; Panel2.Align := alClient; Viele Grüße Sybok |
AW: Anchor macht kompletten Nonsense!
Zitat:
|
AW: Anchor macht kompletten Nonsense!
Ich mach sowas mittlerweile aus Gewohnheit immer in einem "Masterpanel" eingebettet. Ist leichter umzubauen, aligned besser (immer ok), auch mit altem Delphi.
Evtl auch gern noch mit Splitter dazwischen. Andersrum: Immer genau 2 Panel liegen in einem Masterpanel, beliebig verschachtelt. Ja und natürlich gibt es Ausnahmen. |
AW: Anchor macht kompletten Nonsense!
@Stevie: Du hast natürlich recht :oops:. Dafür habe ich aber keine Lösung finden können.
Viele Grüße Sybok |
AW: Anchor macht kompletten Nonsense!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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 by Thomas Breitkreuz