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 Oberstes Fenster an der Stelle (X|Y) finden (https://www.delphipraxis.net/93382-oberstes-fenster-der-stelle-x%7Cy-finden.html)

glkgereon 5. Jun 2007 07:24


Oberstes Fenster an der Stelle (X|Y) finden
 
Hallo,

Ich habe das (imho eigentlich simple) Problem, dass ich ein Fenster an der Stelle X|Y finden will. Nun kommen allerdings 2 Umstände erschwerend hinzu:
1. Das ganze sollte sich nicht nur auf die Parent-Fenster beschränken (siehe WindowFromPoint) sondern ALLE Fenster beihnhalten.
2. Es sollte immer das vorderste genommen werden.

Den ersten Punkt scheine ich mit EnumWindows umgangen zu haben...
Nun scheitere ich jedoch daran mir den Z-Index zu holen. :wall:
Delphi-Quellcode:
function FindWindow(X, Y: Integer): HWND;
var H: HWND;
    Rec: TRect;
    AZ: Integer;
  function EnumProc(wnd: HWND; LParam: LPARAM): LongBool; stdcall;
  begin
    GetWindowRect(wnd,Rec);
    if (X>=Rec.Left) and (X<=Rec.Right) and (Y>=Rec.Top) and (Y<=Rec.Bottom) then
    begin
      H:=wnd;
    end;
    Result:=True;
  end;
begin
  EnumWindows(@EnumProc, 0);
  Result := H;
end;
Wie mache ich nun weiter?

SirThornberry 5. Jun 2007 07:25

Re: Oberstes Fenster an der Stelle (X|Y) finden
 
Nutze einfach WindowFrom Point und dann EnumChildWindows

bitsetter 5. Jun 2007 07:54

Re: Oberstes Fenster an der Stelle (X|Y) finden
 
Hi,

ich finde dein Code müsste bei dir eher so aussehen:
Delphi-Quellcode:
  begin
    Result:= True;
    GetWindowRect(wnd,Rec);
    if (X>=Rec.Left) and (X<=Rec.Right) and (Y>=Rec.Top) and (Y<=Rec.Bottom) then
    begin
      H:=wnd;
      Result := false;//abbrechen, das vorderste Fenster wurde gefunden
    end;
  end;

glkgereon 5. Jun 2007 18:20

Re: Oberstes Fenster an der Stelle (X|Y) finden
 
Zitat:

Zitat von SirThornberry
Nutze einfach WindowFrom Point und dann EnumChildWindows

Und wie finde ich da das oberste?

Zitat:

Zitat von bitsetter
Hi,

ich finde dein Code müsste bei dir eher so aussehen:
Delphi-Quellcode:
  begin
    Result:= True;
    GetWindowRect(wnd,Rec);
    if (X>=Rec.Left) and (X<=Rec.Right) and (Y&gt;=Rec.Top) and (Y&lt;=Rec.Bottom) then
    begin
      H:=wnd;
      Result := false;//abbrechen, das vorderste Fenster wurde gefunden
    end;
  end;

äh, ja, oder so :-D

Muetze1 5. Jun 2007 19:21

Re: Oberstes Fenster an der Stelle (X|Y) finden
 
kleiner Tipp: PtInRect():
Delphi-Quellcode:
 If PtInRect(Point(x, y), lRect) then ...


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