| Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: So 24.05.09 13:59
Hallo,
eines Vorweg: Meine Form soll sich nach dem Schließen Position, Größe und WindowState merken.
Folgendes Problem: Ich habe hier ein Panel, welches 2 Labels und 1 Checkbox sein eigen nennt
Da die Form skalierbar sein soll, habe ich bei Label1, welches sich in der linken unteren Ecke des Panels befindet, die Anchors auf Bottom und Left gesetzt. Bei Label2 das gleiche, nur statt Left das Flag Right gesetzt.
Die Checkbox befindet sich ebenfalls links unten.
Wenn ich nun im onCreate Ereignis festlege, dass die Form den Zustand WindowState annehme soll, dann bewegen sich die im Panel platzierten Labels nicht automatisch durch die Anchors mit, sprich sie sind immernoch dort, wo ich sie zur Designzeit platziert habe. Verkleinere ich dann allerdings die Form, sind sie wieder verankert und bewegen sich folglich aus der Form heraus.
Die Checkbox allerdings verhält sich absolut korrekt.
Ich habe herausgefunden, dass, wenn ich eines der beiden Labels außerhalb des Panels lege, es die richtige Position gemäß des Anchors einnimmt. Also muss es irgendetwas mit dem Panel zu tun haben.
Die Positionsangaben der Labels wird im gesamten Code nicht angetastet.
Habt ihr eine Idee, was ich da falsch mache ??
Ciao LHuser Moderiert von Narses: Topic aus Windows API verschoben am So 24.05.2009 um 23:18
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: So 24.05.09 14:27
Wenn ich Dich gerade richtig verstanden habe, musst Du das doch eigentlich nur das so machen, um das Label kurz über dem unteren Rand zu platzieren:
Delphi-Quelltext 1: 2: 3: 4:
| Procedure FormWieAUchImmerSieHeisst.OnResize(ParameterWeißichJetztNicht) begin LabelkurzUeberDemUnterenRand.Top:=Panel1.Height-5-LabelkurzUeberDemUnterenRand.Height; end; |
Oder habe ich das Problem jetzt falsch verstanden?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.05.09 14:33
Das ist aber ja keine sonderlich gute Lösung, da man das manuell machen muss.
@ LonghornUser: Kannst du vielleicht ein kleines Demoprojekt anhängen?
Und mit welcher Delphiversion arbeitest du?
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 24.05.09 14:40
Demoprojekt wird nix, denn das ganze ist zu groß. Ich kriege es auch nicht in einem neuen Projekt reproduziert.
Ich kann nur sagen, dass es nicht auftritt, wenn ich das Label außerhalb des Panels platziere.
Ich arbeite mit Delphi 2009.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.05.09 14:42
LonghornUser hat folgendes geschrieben : | | Ich kriege es auch nicht in einem neuen Projekt reproduziert. |
Naja, damit ist ja klar, dass es an irgendetwas in deinem Projekt liegen muss. Ich selbst hatte ein solches Problem bisher nie, deshalb wüsste ich nicht, wodurch das verursacht werden könnte.
Was du jetzt nur machen kannst: Sichere das Projekt und lösche dann einfach nacheinander alles heraus bis es nicht mehr auftritt oder du ein kleines Demoprojekt übrig behältst.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 24.05.09 15:04
Ich hab es hinbekommen. Ich habe nach vielen Versuchen gemerkt, dass es daran lag, dass ich erst nach dem Maximieren Caption-Werte der beiden Labels verändert habe (was eigentlich kein Problem sein sollte ???). Seitdem ich die SetLanguage-Methode (denn die ist für die Änderung der Caption-Werte verantwortlich) vor das Maximieren gestellt habe, geht alles reibungslos.
Ein Mysterium.
Ich habe auch das mal versucht zu reproduzieren, aber in einem neuen Projekt klappt es seltsamerweise in beiden Richtungen (davor und danach). Sehr seltsam.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.05.09 15:16
LonghornUser hat folgendes geschrieben : | | Ich habe nach vielen Versuchen gemerkt, dass es daran lag, dass ich erst nach dem Maximieren Caption-Werte der beiden Labels verändert habe (was eigentlich kein Problem sein sollte ???). |
Naja, hast du AutoSize bei den Labels an? Wenn ja, würde ich das deaktivieren, denn wenn du ohnehin Anchors benutzt, nutzt du den Platz doch ohnehin optimal aus. Und wenn der Label dann in der Größe verändert wird, dann kann das schon Effekte haben.
Warum das dann genau an der Stelle einen solchen Effekt hat, weiß ich so aus der Ferne natürlich nicht, aber ich vermute, dass es daran liegt.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 24.05.09 15:40
Ja, es lag am AutoSize-Flag. Vielen Dank für den Hinweis.
Aber das ist doch bei Delphi standardmäßig aktiviert. Wieso macht man sowas, wenn das solche Auswirkungen auf das GUI Layout haben kann ?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.05.09 15:56
Naja, bei mir gab es da nie Probleme, aber man muss es eben überlegen wo man das Layout wie realisiert. Wenn man Anchors aktiviert, dann sollte man AutoSize ausschalten, da man sich selbst um die Positionierung und Größe kümmert abhängig vom übergeordneten Element.
Standardmäßig sind Anchors deaktiviert, da ist AutoSize sehr sinnvoll, die Anchors hast du ja selbst aktiviert. 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 24.05.09 16:13
Da hast du recht. Man müsste die beiden Attribute koppeln, sprich eine Antivalenz schaffen 
|
|
|