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 Ursprüngliche Reihenfolge nach Änderungen von "Visible" ? (https://www.delphipraxis.net/102468-urspruengliche-reihenfolge-nach-aenderungen-von-visible.html)

Deep-Sea 29. Okt 2007 14:36


Ursprüngliche Reihenfolge nach Änderungen von "Visible&
 
Hallöchen ...
Ich hab da mal ein kleines Problem. Und zwar folgendes als Beispiel:

Man nehme zB. 3 Panels und richte sie auf einem beliebigen Parent mit "Align = alTop" aus. Je nach Reihenfolge der Änderungen von "Visible" der einzelnen Panels ergibt sich eine falsche Reihenfolge, so dass das 2. Panel zb. unter dem 3. liegt. Und genau das möchte ich nicht. Ich möchte die ursprüngliche Reihenfolge beibehalten.

Leider fällt mir gerade (wohl aufgrund von Kopfschmerzen ^^) nichts ein, wie ich es schön und einfach lösen könnte ... aber vlt. wisst ihr was. (PS: Irgendwelche extrem rustikalen Methoden fallen mir schon selber ein, aber die müssen ja nicht sein) :-D

oki 30. Okt 2007 22:42

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Hi,

besitzen alle Controls das gleiche Align, wie bei dir Top, so ligen diese in der Reihenfolge der Erstellung (Einblendung) in Reihenfolge von oben nach unten. Sind alle Controls visible = False, so passiert folgendes. Das erste Control für Visible liegt oben, das nächste an zweiter Stelle usw.

Wenn du jetzt eine definierte Reihenfolge haben möchtest, so mache beim Einblenden eines weiteren Controls folgendes. Alle Controls Visible = False, dann alle sichtbaren Controls in der Reihenfolge von Oben nach unten Visible True.

Ist also Control2 visible = True und Control1 Visible = False und Control1 soll eingeblendet und über Control2 angezeigt werden, dann wie folgt:

Delphi-Quellcode:
  Control2.Visible := False;
  Control1.Visible := True;
  Control2.Visible := True;
Jetzt stimmt die Reihenfolge wieder.

Gruß oki

Deep-Sea 31. Okt 2007 08:02

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Leider führt das genau zu dem, was ich nicht will:
Nachdem das oberste (1.) Panel unsichtbar ist, rutscht das 2. nach oben. Beide haben nun den gleichen Top-Wert. Wenn ich nun erst das 1. Panel und dann das 2. sichtbar mache, ist das 2. über dem ersten. Also wenn, müsste ich mich von unten nach oben arbeiten. Aber auch nur, wenn alle den gleichen Top-Wert hätten. Mhh...

Ich denke ich löse es wohl doch anders, aber trotzdem danke :-D

oki 31. Okt 2007 19:43

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Zitat:

Zitat von Deep-Sea
Leider führt das genau zu dem, was ich nicht will:
Nachdem das oberste (1.) Panel unsichtbar ist, rutscht das 2. nach oben. Beide haben nun den gleichen Top-Wert. Wenn ich nun erst das 1. Panel und dann das 2. sichtbar mache, ist das 2. über dem ersten. Also wenn, müsste ich mich von unten nach oben arbeiten.

Naja, dann halt anders herum. Das Ergebnis zählt.

Zitat:

Zitat von Deep-Sea
Aber auch nur, wenn alle den gleichen Top-Wert hätten. Mhh...

Also ich kenne bei Align nur einen Top-Wert, und der ist alTop. Welche weiteren Werte für Top verwendest du denn noch? Würd mich echt mal interessieren :gruebel:

Gruß oki

Deep-Sea 1. Nov 2007 07:14

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Zitat:

Zitat von oki
Zitat:

Zitat von Deep-Sea
Aber auch nur, wenn alle den gleichen Top-Wert hätten. Mhh...

Also ich kenne bei Align nur einen Top-Wert, und der ist alTop. Welche weiteren Werte für Top verwendest du denn noch? Würd mich echt mal interessieren :gruebel:

Gruß oki

Ich meine die TControl-Eigenschaft Top ^^ denn anhand von Top und Height regelt Delphi die Reihenfolge (bei alTop und alBottom zumindest) :-D

Progman 1. Nov 2007 07:18

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Für diese Problematik sollte man Align auf alNone stellen und die Position "per Hand" festlegen.

Deep-Sea 1. Nov 2007 07:27

Re: Ursprüngliche Reihenfolge nach Änderungen von "Visi
 
Zitat:

Zitat von Progman
Für diese Problematik sollte man Align auf alNone stellen und die Position "per Hand" festlegen.

Viele Wege führen nach Rom *gg*

Hab's nun so gelöst (bevor noch wer Fragt xD):
Es gibt mehrere Zustände, einer ist der Grundzustand. Ich merke mir die Position und Größe (BoundsRect) aller Controls im Grundzustand. Wenn ich nun in einen anderen Zustand wechsel, setze ich zuerst alle Controls wieder auf ihren Grundzustand. Zuvor muss ich natürlich beim Parent DisableAlign aufrufen. Dann setze ich noch Visible auf die gewünschten Werte und mache wieder EnableAlign ...


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