AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop
Thema durchsuchen
Ansicht
Themen-Optionen

Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

Ein Thema von CCRDude · begonnen am 7. Jul 2011 · letzter Beitrag vom 20. Sep 2011
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 8. Jul 2011, 13:04
Beim TSplitter handelt es sich in der Tat um eine Ausnahme; hier darf man auch 3 Controls auf einen Container packen.
...aber dann gäbe es doch immer noch mindestens 5 stabile Controls statt nur 2? alTop, alLeft, alRight und alBottom sind ja auch zusammen angewandt um ein Align = alClient immer noch "stabil".
Die Frage ist dann nur, welches Control darf die Ecken beanspruchen und welches Control wird aus der Ecke verdrängt?
Hier gilt dann das Prinzip "wer zuerst kommt mahlt zuerst".
Das bedeutet die Erstellungsreihenfolge der Controls hat direkten Einfluss auf das Layout.
Sollte ein Control, und sei es nur kurzzeitig, unsichtbar geschaltet werden und danach wieder sichtbar (Visible := True) dann hat es seine Position im Layout verloren
und die Anordnung hat sich geändert.
Das meine ich mit Unstabil.
Bei zwei Controls ist die Erstellungsreihenfolge unerheblich; die Kombination aus (alTop|alLeft|alRight|alBottom) zusammen mit alClient ist immer stabil.
Andreas
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 8. Jul 2011, 13:10
Und TActionMainMenuBar plus TActionToolbar sind dann die nächste Ausnahme, und dann gibt es noch diese Ausnahme, und jene...?

Die Ecken hängen bei Align nicht von der Erstellungsreihenfolge ab, da gibt es afaik eine definierte Reihenfolge, ich glaube alTop und alBottom haben Vorrang vor alLeft und alRight.

Natürlich bestehen die Problematiken, die Du erwähnt hast: unsichtbarschalten etwa.

Aber: die existieren nur, wenn man etwa Visible ändert. Das macht die VCL nicht von alleine. Und ob das unstabil oder nicht ist, hängt also davon ab, ob man mit eigenem Code etwas berücksichtigt, was eigener Code verursacht. Das ist für mich weit an der Definitiv von "unstabil" vorbei!

Egal, den Kern hast Du ja erwähnt - die Erstellungsreihenfolge. Danach fragte ich ja - wie ist das VCL-intern beim Formerstellen zur Laufzeit geregelt (die ist mMn sehr stabil und reproduzierbar) und was ist daran anders als an meiner dynamischen Erzeugung?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 8. Jul 2011, 17:36
Wenn man zur Designzeit etwas aufs Form packt wird doch auch "Top" mit abgespeichert.
Dadurch klappt das auch mit der Positionierung.
Die Erstellungsreihenfolge ist dabei egal denn das Align wird nicht ausgeführt wenn ein neues Control hinzu kommt sondern erst wenn Handles angefordert werden etc.
Das kann man wunderbar beobachten wenn man ein Control dynamisch erzeugt, den Align-Wert setzt und direkt danach Top/Left/Width/Height ausliest. Diese Werte ändern sich frühestens wenn das nächste mal Messages abgearbeitet werden oder eben durch einen manuellen Aufruf von ReAlign
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.360 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 9. Jul 2011, 10:02
M.E. wurde das Verhalten "irgendwann einmal" in Delphi geändert (in diesem Punkt verschlechtert).
Ich denke, früher war es so, dass beim Align die "ursprüngliche" Position den Komponenten (Top, Left) zu Ausrichtung herangezogen wurden.
Heute wird die "aktuelle" Position verwendet. Wenn man nun ein Control unsichtbar und dann wieder sichtbar macht, verschieben sich die Reihenfolgen, da sich die anderen Controls zischenzeitlich verschoben wurden.
Bei solchen Anforderungen setze ich die Höhe des Auszublendenden Controls inzwischen manchmal auf 0 und dann wieder zurück.

Ich meine früher, war das Verhalten der VCL in diesem Punkt vorhersehbarer und besser.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#5

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 9. Jul 2011, 14:00
Eine ähnliche Frage gab es auch mal bei Stackoverflow.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Reihenfolge von zur Laufzeit erstellten Komponenten mit Align=alTop

  Alt 20. Sep 2011, 16:45
Nachdem ich an ursprünglicher Stelle auf anderes Alignment umgestiegen bin, kam ich heute wieder drauf, und habe das Problem dank diesem Thread nochmal überdacht. Insbesondere danke für den letzten Link zu Stackoverflow!

Mit reversem Setzen des Top auf 0 oder negative Werte konnte ich zwar nichts erreichen, wohl aber mit folgendem kleinen Helfer:
Delphi-Quellcode:
procedure ArrangeTControlTopOrder(AControls: array of TControl);
var
   i: integer;
begin
   if Length(AControls) = 0 then begin
      Exit;
   end;
   AControls[0].Top := 0;
   for i := 1 to Pred(Length(AControls)) do begin
      AControls[i].Top := AControls[i - 1].Top + AControls[i - 1].Height;
   end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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