![]() |
Form.Width stimmt nicht nach WindowsState = wsMaximized
Hallo,
ich belschreibe im OnCreate der Form die Properties "Height", "Widht", "Top" und "Left" mit Werten. (hier aus einem Rec, aber das spielt keine Rolle)
Delphi-Quellcode:
Danach wird die Form maximiert dargestellt. (MainForm_Rec.Rec_maximiert = true)
//MainForm-Positionen aus Rec laden
MainForm.Height := MainForm_Rec.Rec_Height; MainForm.Width := MainForm_Rec.Rec_Width; MainForm.Top := MainForm_Rec.Rec_Top; MainForm.Left := MainForm_Rec.Rec_Left; //maximiert starten If MainForm_Rec.Rec_maximiert then MainForm.WindowState := wsMaximized; Wenn ich danach dann Form.Width abfrage, so erhalte ich aber noch den alten Wert vor dem Maximieren. Wieso wird dieser Wert mit dem Maximieren nicht aktualisiert? |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Vermutlich, weil Maximized ein grundsätzlich anderer Darstellungszustand ist. Wenn die Werte überschrieben würden, dann ließe sich ja auch schlecht die vorherige Größe wiederherstellen - also für mich macht das schon Sinn.
|
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Moin Helmi,
probier's mal mit
Delphi-Quellcode:
aufzurufen im OnShow-Event des Formulares.
SendMessage(self.Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0);
|
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
... aber das dürfte nichts an der Tatsache ändern, dass width&co die alten Werte führen.
|
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Hallo Helmi,
ich hatte hier ![]() cg |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Hallo Helmi,
beim Auslösen des Ereignisses OnCreate ist das Formular noch nicht dargestellt worden, deshalb erhältst du dort noch die alten Werte. Prüfe die Breite/Höhe mal in den Behandlungsroutinen für OnPaint oder OnResize. OnShow wäre übrigens auch zu früh, falls du jetzt daran gedacht haben solltest... @ConstantGardener Im OnResize stimmen die Werte bei mir - überprüft mit D2006 und D2009. Gruß Hawkeye |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
@Hawkeye : Ich hab das eben nochmal in einer TestApp nachgestellt. Das onResize des Forms wird zweimal gefeuert. Beim ersten mal stimmen die Werte nicht. Beim zweiten mal schon. Das Problem tritt auf wenn man ein Grid auf ein Panel packt (beides per alClient bzw. altop und alClient) und dann die Width-Werte des Grids abfragen will. Hier bekommt das Grid beim maximierren die falschen Werte. Liegt das Grid direkt auf dem Form ist alles in Ordnung.
Ist umschiffbar aber nervt wenn man danach sucht. cg |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Zitat:
Der "Doppel-Event" tritt offenbar nur beim ersten Mal auf, jedes weitere Maximieren löst nur einen Event aus. Für das Setzen von WindowState gäbe es noch den Ausweg, die Änderung in der überschriebenen Loaded-Methode durchzuführen, falls die Information aus einer Konfigurationsdatei kommen muss und nicht über den Objektinspektor eingestellt werden kann. Eine Änderung der Höhe/Breite führt aber auch in dieser Routine wieder zu zwei OnResize-Events. Gruß Hawkeye |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Hallo,
Danke für eure Antworten. Ich hab auf der Form eine StringGrid mit alClient. Im Laufe des Programmes wird die StringGrid beschrieben, und dann die Breite der Spalten abhängig von StringGrid.ClientWidth und der Anzahl der Spalten berechnet. Beim ersten Mal hat ClientWidth den Wert vor dem Maximieren, beim zweitem Aufruf der gleichen Procedure (in der die Spaltenbreite definiert wird) stimmt dann ClientWidth. Das klingt danach, als müsste man einmal die Breite aufrufen, damit sie sich aktualisiert. |
Re: Form.Width stimmt nicht nach WindowsState = wsMaximized
Hallo Helmi,
wie schon oben gesagt scheint es zu funktionieren wenn Du das StringGrid direkt auf dem Form hast. Liegt es in einem Container (TPanel) scheinen die Werte erst beim 2. Aufruf zu stimmen. Wenn Du das Grid in einem Container hast kannst Du versuchen die Werte den Containers zur Berechnung der Spaltenbreite des Grids zu nutzen. cg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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