Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln (https://www.delphipraxis.net/174403-clientheight-clientwidth-top-und-left-eines-externen-fensters-ermitteln.html)

Helmi 20. Apr 2013 15:11

ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Hallo,

ist es möglich von einem externen Fenster "ClientWidth",
"ClientHeight", "Top" und "Left" auszulesen?
Und falls ja, wie.

Helmi 20. Apr 2013 15:17

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Wieso fallen mir die Antworten immer erst ein, nachdem ich nen Thread erstellt habe?

Delphi-Quellcode:
var
  r: TRect;

begin
  GetWindowRect(h, r);
end;

Aphton 20. Apr 2013 23:07

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Nja damit kriegste aber ned ClientWidth/ClientHeight sondern Width/Height (Right-Left, Bottom-Top)

Luckie 20. Apr 2013 23:34

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Und dann kann man die Rahmendicke abziehen, die man über GetSystemmetrics abfragen kann.

Amateurprofi 21. Apr 2013 00:29

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Zitat:

Zitat von Luckie (Beitrag 1212217)
Und dann kann man die Rahmendicke abziehen, die man über GetSystemmetrics abfragen kann.

Und was ist, wenn das Fenster eine Caption hat, und vielleicht auch ein Menu?

Ich denke
Delphi-Quellcode:
GetClientRect
wäre sinnvoller.

Luckie 21. Apr 2013 01:06

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Kann man auch alles abfragen. Aber wenn es dafür eine schon fertige Funktion gibt, ist es natürlich einfacher diese zu benutzen.

Helmi 21. Apr 2013 10:14

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Zitat:

Zitat von Luckie (Beitrag 1212221)
Kann man auch alles abfragen. Aber wenn es dafür eine schon fertige Funktion gibt, ist es natürlich einfacher diese zu benutzen.

Nur leider brauch ich das für ein externes Fenster - nicht für eine eigene Form...


Mit GetWindowRect ermittle ich ja das Rect des (sichtbaren) Fensters. Aber gibt es auch die Möglichkeit das Rect eines Fensters zu ermitteln, das größer ist, als der sichtbare Bereich, also mit Scrollbalken?

Wie gesagt, ich bin in einem externen Fenster

Der.Kaktus 21. Apr 2013 12:35

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
fremdes Fenster ist doch nicht anders..nur HWnd suchen und los gehts ;-)


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    hNotepadWindow: HWND;
    lpr:TRect;
begin
    hNotepadWindow := FindWindow('notepad', nil);
    getwindowrect(hNotepadWindow,lpr);
end;

Helmi 21. Apr 2013 12:43

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Zitat:

Zitat von Der.Kaktus (Beitrag 1212251)
fremdes Fenster ist doch nicht anders..nur HWnd suchen und los gehts ;-)


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    hNotepadWindow: HWND;
    lpr:TRect;
begin
    hNotepadWindow := FindWindow('notepad', nil);
    getwindowrect(hNotepadWindow,lpr);
end;

das hatte ich ja selbst schon rausgefunden (siehe Post #2)

Bummi 21. Apr 2013 16:38

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Delphi-Quellcode:
var
    hand: HWND;
    WndRect,ClntRect:TRect;
begin
    hand := FindWindow('notepad', nil);
      if handle <> 0 then
        begin
          GetWindowRect(hand,WndRect);
          Windows.GetClientRect(hand,ClntRect);
          Showmessage(Format('Window Top: %d Left: %d Right: %d Bottom %d'#13#10
                             +'Client Top: %d Left: %d Right: %d Bottom %d'#13#10
                             ,[WndRect.Top,WndRect.Left,WndRect.Right,WndRect.Bottom
                             , ClntRect.Top,ClntRect.Left,ClntRect.Right,ClntRect.Bottom]));
        end;
end;

Helmi 27. Apr 2013 12:25

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Zitat:

Zitat von Bummi (Beitrag 1212260)
Delphi-Quellcode:
var
    hand: HWND;
    WndRect,ClntRect:TRect;
begin
    hand := FindWindow('notepad', nil);
      if handle <> 0 then
        begin
          GetWindowRect(hand,WndRect);
          Windows.GetClientRect(hand,ClntRect);
          Showmessage(Format('Window Top: %d Left: %d Right: %d Bottom %d'#13#10
                             +'Client Top: %d Left: %d Right: %d Bottom %d'#13#10
                             ,[WndRect.Top,WndRect.Left,WndRect.Right,WndRect.Bottom
                             , ClntRect.Top,ClntRect.Left,ClntRect.Right,ClntRect.Bottom]));
        end;
end;

Danke für den Code.
Ich hab aber leider noch eine Frage:
Mit dem oberen Code kann ich die sichtbare Größe des externen Fensters auslesen.
Wenn aber das Fenster Scrollbars hat, dann ist ja die sichtbare Größe kleiner als die maximale Größe des Fensters.
Wie kann ich denn die komplette (maximale) Größe des externen Fensters auslesen?

Helmi 5. Mai 2013 09:54

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
*ganz nach oben häng*

CTest 17. Mai 2013 10:32

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
GetScrollRange

Helmi 18. Mai 2013 11:26

AW: ClientHeight, ClientWidth, Top und Left eines externen Fensters ermitteln
 
Danke!

Aber mein Problem besteht weiter - das Fenster wird sichtlich nicht gescrollt
auch ein neuzeichnen bringt nichts


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 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