![]() |
prüfen ob Formular verdeckt ist
Hallo, wie kann ich prüfen ob ein Fenster von einem anderen Verdeckt wird?
|
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.
|
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. |
Re: prüfen ob Formular verdeckt ist
Zitat:
|
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:
Ich hab es auch mit der linken oberen und rechten unteren Ecke probiert, das ging aber auch nicht. Was ist daran falsch?
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; |
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?
|
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; |
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
|
Re: prüfen ob Formular verdeckt ist
Geht immernoch nicht, das mit dem Pixel abziehen habe ich auch schon probiert.
|
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:
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.
if WindowFromPoint(Point(Left + 10, Top + 10)) = Self.Handle then
so gehts also:
Delphi-Quellcode:
if WindowFromPoint(Self.ClientOrigin) = Self.Handle then
|
Re: prüfen ob Formular verdeckt ist
Ok, jetz funktioniert es, vielen Dank! :thumb:
|
Re: prüfen ob Formular verdeckt ist
Huch, wenn das Fenster maximiert ist gehts nicht mehr :gruebel:
EDIT: so siehts jetzt aus:
Delphi-Quellcode:
function TMainForm.IsOnTop: boolean;
begin result := false; if (WindowFromPoint(Point(Left + 10, Top + 10)) = Self.Handle) and (WindowFromPoint(Point(Left + Width - 5, Top + Height - 5)) = Self.Handle) then result := true; end; |
Re: prüfen ob Formular verdeckt ist
*push* :duck:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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