Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Form maximiert, dennoch Breite und Höhe vom nichtmaximierten
trm - Mi 02.05.12 20:16
Titel: Form maximiert, dennoch Breite und Höhe vom nichtmaximierten
Hallihallo.
Gibt es unter Delphi 7 eine Möglichkeit die Werte für Breite und Höhe der Form im normalzustand (nicht maximiert) zu erhalten, wenn diese maximiert wurde?
(Windows speichert diese Werte ja auch irgendwo)
bummi - Mi 02.05.12 23:46
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.Button1Click(Sender: TObject); var wp:tagWINDOWPLACEMENT; begin Getwindowplacement(handle,wp); Caption := 'Breite: ' + IntToStr(wp.rcNormalPosition.Right - wp.rcNormalPosition.Left) + ' - Höhe: ' + IntToStr(wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top)
end; |
trm - Do 03.05.12 18:43
War nicht ganz korrekt, aber Getwindowplacement hat mir weitergeholfen, da ich es nicht kannte :)
bummi - Do 03.05.12 18:52
Verrätst Du noch was nicht korrekt war?
trm - Do 03.05.12 19:10
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function GetWindowState(Wnd: HWnd; var wp: PWINDOWPLACEMENT): Boolean; var WPlacement: PWINDOWPLACEMENT; begin Result := False; GetMem(WPlacement, SizeOf(TWINDOWPLACEMENT)); WPlacement^.Length := SizeOf(TWINDOWPLACEMENT); if GetWindowPlacement(Wnd, WPlacement) then Result := True; wp := WPlacement; FreeMem(WPlacement); end; |
Allein die Variable war schon falsch ;)
bummi - Do 03.05.12 19:19
so sieht es unter XE aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function GetWindowPlacement(hWnd: HWND; WindowPlacement: PWindowPlacement): BOOL; external user32 name 'GetWindowPlacement'; function GetWindowPlacement(hWnd: HWND; var WindowPlacement: TWindowPlacement): BOOL; external user32 name 'GetWindowPlacement';
mit
TWindowPlacement = tagWINDOWPLACEMENT; |
trm - Do 03.05.12 19:44
Hm, bei mir geht es nur mit der Variante, die ich Dir gezeigt habe (Win7, Delphi 7) :)
Danke, Du hast mir auf jeden Fall sehr geholfen.
jaenicke - Do 03.05.12 20:28
Deine Variante ist aber nicht wirklich gut, denn du reservierst dir zwar Speicher, gibst den aber wieder frei. Und zurück lieferst du nicht etwa die Daten, sondern nur einen Zeiger auf die freigegebenen Daten.
Das geht nur zufällig gut. ;-)
Die Variable kann ruhig direkt vom Typ des Records sein, bei D7 muss nur die Adresse übergeben werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function GetWindowState(AWnd: HWND): TWindowPlacement; begin Result.Length := SizeOf(TWindowPlacement); if not GetWindowPlacement(AWnd, @Result) then RaiseLastOSError; end; |
trm - Do 03.05.12 20:59
Das Problem ist, ich benötige einen Rückgabewert, ob der Funktionsaufruf geklappt hat.
Geht es auch hiermit ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function GetWindowState(Wnd: HWnd; var wp: PWINDOWPLACEMENT): Boolean; begin Result := False; GetMem(wp, SizeOf(TWINDOWPLACEMENT)); wp^.Length := SizeOf(TWINDOWPLACEMENT); if GetWindowPlacement(Wnd, wp) then Result := True; end; |
Die Variable wird vorher initialisiert und auch nach Benutzung frei gegeben.
jaenicke - Do 03.05.12 21:03
Lass doch endlich die Pointerspielerei. ;-) :mrgreen:
Du übergibst einen Pointer (var-Parameter) auf einen Pointer als Parameter...
Wie wäre es so?
Delphi-Quelltext
1: 2: 3: 4: 5:
| function GetWindowState(Wnd: HWnd; var wp: TWindowPlacement): Boolean; begin wp.Length := SizeOf(TWindowPlacement); Result := GetWindowPlacement(Wnd, @wp); end; |
trm - Do 03.05.12 21:35
Hm, mit Deiner Lösung bekomme ich jedes mal einen Ausnahmefehler.
Mit meinem Konstrukt nicht.
jaenicke - Do 03.05.12 21:37
Wie benutzt du es denn? Bei mir funktioniert das. :nixweiss:
trm - Do 03.05.12 21:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function GetWindowState(Wnd: HWnd; var wp: TWindowPlacement): Boolean; begin
wp.Length := SizeOf(TWindowPlacement); Result := GetWindowPlacement(Wnd, @wp); end;
var wp: PWINDOWPLACEMENT; begin GetMem(wp, SizeOf(TWINDOWPLACEMENT)); if GetWindowState(WND, wp) then begin |
Beim Zugriff auf die Größe des Records in der Funktion tritt der Fehler auf.
Ich nutze immer noch Delphi7.
Narses - Do 03.05.12 22:09
Moin!
Delphi-Quelltext
1: 2:
| var wp: TWindowPlacement; |
Und lass das GetMem weg. :idea:
cu
Narses
trm - Do 03.05.12 22:23
Ach, das war der Fehler.
Somit erklärt sich auch, warum der erste Vorschlag nicht funktioniert hat, denke ich.
Vielen Dank :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!