Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi prüfen ob Formular verdeckt ist (https://www.delphipraxis.net/75702-pruefen-ob-formular-verdeckt-ist.html)

Sko 23. Aug 2006 19:38


prüfen ob Formular verdeckt ist
 
Hallo, wie kann ich prüfen ob ein Fenster von einem anderen Verdeckt wird?

SirThornberry 23. Aug 2006 19:46

Re: prüfen ob Formular verdeckt ist
 
Die Frage ist wie genau du das testen willst. Ich prüfe in den meisten fällen nur ob die linke-obere und die rechte-untere ecke sichtbar ist. Und das prüfe ich mit WindowFromPoint.

Daniel B 23. Aug 2006 20:01

Re: prüfen ob Formular verdeckt ist
 
if not Form1.Active then...

z.B. wenn die Maus das Formular verlässt, also sich nicht mehr in 0,0 bis ClientWidth,ClientHeight befindet, dann die if Abfrage.

mkinzler 23. Aug 2006 20:04

Re: prüfen ob Formular verdeckt ist
 
Zitat:

if not Form1.Active then...
Dann siehst du ob die Form Aktiv ist, aber nicht ob sie verdeckt ist. Mit tools wie z.B. den Powertoys kann man einstellen das Fenster aktiv werden ohne in den Vordergrund geholt zu werden.

Sko 23. Aug 2006 22:09

Re: prüfen ob Formular verdeckt ist
 
Ich hab mal WindowFromPoint probiert, aber funktioniert es nicht, es wird immer false zurückgegeben. Ich hab dafür eine Funktion gebastelt:
Delphi-Quellcode:
function TMainForm.IsOnTop: boolean;
var
  p1: TPoint;
begin
  result := false;
  p1.X := MainForm.Left + round((MainForm.Width/2));
  p1.Y := MainForm.Top + round((MainForm.Height/2));
  if WindowFromPoint(p1) = MainForm.Handle then result := true;
end;
Ich hab es auch mit der linken oberen und rechten unteren Ecke probiert, das ging aber auch nicht. Was ist daran falsch?

SirThornberry 23. Aug 2006 22:12

Re: prüfen ob Formular verdeckt ist
 
warum addierst du zu left und top noch die hälfte der breite bzw. Höhe? liegt an der Stelle eventuell noch ein Panel auf dem Form oder etwas anderes?

Sko 23. Aug 2006 22:30

Re: prüfen ob Formular verdeckt ist
 
Ich wollte die Mitte des Formulars probieren nachdem es mit den Ecken nicht geklappt hat, vorher hatte ich die Ecken genommen:
Delphi-Quellcode:
function TMainForm.IsOnTop: boolean;
var
  p1, p2 : TPoint;
begin
  result := false;
  p1.X := MainForm.Left;
  p1.Y := MainForm.Top;
  p2.X := MainForm.Left + MainForm.Width;
  p2.Y := MainForm.Top + MainForm.Height;
  if (WindowFromPoint(p1) = MainForm.Handle) and (WindowFromPoint(p2) = MainForm.Handle) then result := true;
end;

SirThornberry 23. Aug 2006 22:32

Re: prüfen ob Formular verdeckt ist
 
lass mal die rechte untere ecke weg obs dann geht. Du berechnest die untere rechte ecke falsch. Du musst mindestens noch 1 pixel abziehen

Sko 23. Aug 2006 22:37

Re: prüfen ob Formular verdeckt ist
 
Geht immernoch nicht, das mit dem Pixel abziehen habe ich auch schon probiert.

SirThornberry 23. Aug 2006 22:42

Re: prüfen ob Formular verdeckt ist
 
Du hast bestimmt den XP-Style im Windows aktiv. Wenn das Form keine Ecken hat sondern abgerundet ist, ist logischer weise an der oberen linken ecke bie 0, 0 nix sondern der untergrund kommt durch.
Mit
Delphi-Quellcode:
if WindowFromPoint(Point(Left + 10, Top + 10)) = Self.Handle then
klappts bei dem eingeschalteten Style. Wenn ein anderer Style mehr als 10 Pixel verschenkt gehts natürlich nicht. Du müsstest also möglichst im Clientbereich testen.

so gehts also:
Delphi-Quellcode:
if WindowFromPoint(Self.ClientOrigin) = Self.Handle then


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr.
Seite 1 von 2  1 2      

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