AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form.Width stimmt nicht nach WindowsState = wsMaximized
Thema durchsuchen
Ansicht
Themen-Optionen

Form.Width stimmt nicht nach WindowsState = wsMaximized

Ein Thema von Helmi · begonnen am 30. Dez 2008 · letzter Beitrag vom 31. Dez 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:06
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:
  //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;
Danach wird die Form maximiert dargestellt. (MainForm_Rec.Rec_maximiert = true)

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?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:12
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.
Ralph
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:23
Moin Helmi,

probier's mal mit

  SendMessage(self.Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0); aufzurufen im OnShow-Event des Formulares.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:26
... aber das dürfte nichts an der Tatsache ändern, dass width&co die alten Werte führen.
Ralph
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:35
Hallo Helmi,

ich hatte hier Link auch Probleme mit width und Height von TForm. Das interessante ist, daß die Werte kurze Zeit später simmen. Im on Resize des Forms sind die Werte noch auf den alten Werten. Wenn man jetzt z.B. in einem ButtonClick-Event die Werte abfragt stimmen sie wieder. Die verschiedenen Kompos verhalten sich hier sehr unterschiedlich. Ein DBGrid per alClient skaliert liefert die falschen Werte. Ein Drawgrid mit den gleichen Einstellungen arbeitet völlig korrekt.

cg
Andreas Schachtner
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 22:41
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
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 23:17
@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
Andreas Schachtner
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 30. Dez 2008, 23:49
Zitat von ConstantGardener:
Das onResize des Forms wird zweimal gefeuert.
Ok, ich hatte mir lediglich die Breite in der Titelleiste des Formulars anzeigen lassen, da ist das erste Ereignis natürlich untergegangen. Deshalb vielen Dank für die Klärung.

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
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 31. Dez 2008, 08:49
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Form.Width stimmt nicht nach WindowsState = wsMaximized

  Alt 31. Dez 2008, 11:15
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
Andreas Schachtner
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz