| Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Mi 02.05.12 20:16
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)
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: trm
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Do 03.05.12 18:43
War nicht ganz korrekt, aber Getwindowplacement hat mir weitergeholfen, da ich es nicht kannte 
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 03.05.12 18:52
Verrätst Du noch was nicht korrekt war?
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Do 03.05.12 19:10
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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; |
Für diesen Beitrag haben gedankt: Martok, trm
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
Zuletzt bearbeitet von trm am Do 03.05.12 21:03, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 03.05.12 21:03
Lass doch endlich die Pointerspielerei.
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 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Do 03.05.12 21:35
Hm, mit Deiner Lösung bekomme ich jedes mal einen Ausnahmefehler.
Mit meinem Konstrukt nicht.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 03.05.12 21:37
Wie benutzt du es denn? Bei mir funktioniert das. 
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 03.05.12 22:09
Moin!
Delphi-Quelltext 1: 2:
| var wp: TWindowPlacement; | Und lass das GetMem weg.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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 
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|