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 Anchor macht kompletten Nonsense! (https://www.delphipraxis.net/162326-anchor-macht-kompletten-nonsense.html)

ralfiii 17. Aug 2011 15:33

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:
  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
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!!!

mquadrat 17. Aug 2011 15:45

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

ralfiii 17. Aug 2011 15:48

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:

Zitat von mquadrat (Beitrag 1117569)
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


Stevie 17. Aug 2011 16:17

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

Sybok Factor 17. Aug 2011 16:19

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:
Panel2.Align := alNone;
Panel1.Visible := True;
Panel2.Align := alClient;
Ich würde es mir auch anders wünschen, aber ich sehe das von dir beschriebene Verhalten durchaus als ein MÖGLICHES Verhalten.

Viele Grüße

Sybok

Stevie 17. Aug 2011 16:34

AW: Anchor macht kompletten Nonsense!
 
Zitat:

Zitat von Sybok Factor (Beitrag 1117582)
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:
Panel2.Align := alNone;
Panel1.Visible := True;
Panel2.Align := alClient;
Ich würde es mir auch anders wünschen, aber ich sehe das von dir beschriebene Verhalten durchaus als ein MÖGLICHES Verhalten.

Viele Grüße

Sybok

Ich glaub, du hast das Problem nicht verstanden: Die Anchors des Memos ziehen nicht richtig.

jobo 17. Aug 2011 17:23

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.

Sybok Factor 18. Aug 2011 10:52

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

Stevie 18. Aug 2011 12:14

AW: Anchor macht kompletten Nonsense!
 
Zitat:

Zitat von Sybok Factor (Beitrag 1117811)
Dafür habe ich aber keine Lösung finden können.

Die hab ich oben ja schon genannt ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz