Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 02.05.12 23:46 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 03.05.12 19:10 
ausblenden 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 ;)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 03.05.12 19:19 
so sieht es unter XE aus
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

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

Windows 7x64
Delphi 7
BeitragVerfasst: Do 03.05.12 20:59 
Das Problem ist, ich benötige einen Rückgabewert, ob der Funktionsaufruf geklappt hat.

Geht es auch hiermit ?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

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

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 03.05.12 21:37 
Wie benutzt du es denn? Bei mir funktioniert das. :nixweiss:
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 03.05.12 21:59 
ausblenden 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

// Hier bei dieser Zuweisung tritt der Fehler auf
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 03.05.12 22:09 
Moin!

ausblenden Delphi-Quelltext
1:
2:
var
  wp: TWindowPlacement;
Und lass das GetMem weg. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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 ;)