Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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. :shock:

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 user profile iconNarses: Topic aus Windows API verschoben am So 24.05.2009 um 23:18
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.05.09 14:33 
Das ist aber ja keine sonderlich gute Lösung, da man das manuell machen muss.

@user profile iconLonghornUser: Kannst du vielleicht ein kleines Demoprojekt anhängen?
Und mit welcher Delphiversion arbeitest du?
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.05.09 14:42 
user profile iconLonghornUser hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.05.09 15:16 
user profile iconLonghornUser hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: So 24.05.09 16:13 
Da hast du recht. Man müsste die beiden Attribute koppeln, sprich eine Antivalenz schaffen ;)