AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Herausfinden, ob Fenster sichtbar ist
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden, ob Fenster sichtbar ist

Offene Frage von "Benmik"
Ein Thema von littleDave · begonnen am 25. Sep 2008 · letzter Beitrag vom 27. Dez 2016
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

AW: Herausfinden, ob Fenster sichtbar ist

  Alt 22. Nov 2016, 17:27
Meine aktuelle Funktion sieht momentan so aus. Ich habe nur die markierte Stelle geändert aber leider habe ich keinen Zugriff auf GetClientRect.

Delphi-Quellcode:
function GetVisibleStatus(const PForm: TForm): TVisibleStatus;
var
 Clip: Integer;
 hDC: THandle;
 ClipRect, ClientRect: TRect;
begin
 hDC := GetDC(PForm.Handle);
 Clip := GetClipBox(hDC, ClipRect);

 case Clip of
  NULLREGION:
   Result := vsHidden; // Fenster ist komplett versteckt
  SIMPLEREGION:
   begin
    ClientRect := PForm.GetClientRect; // nur das hier habe ich geändert

    if EqualRect(ClipRect, ClientRect) then // vollständig sichtbar
     Result := vsVisible // ClientRect ist sichtbar
    else // teils sichtbar
     Result := vsPartVisible; // ClientRect ist sichtbar
   end;
  COMPLEXREGION: // Region besteht aus mehr als einem Rechteck, Fenster ist teils sichtbar
   Result := vsPartVisible;
 end;

 ReleaseDC(Handle, hDC);
end;
Die letzte Zeile verstehe ich auch nicht. Müsste da nicht eigentlich PForm.Handle stehen und nicht Handle?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#2

AW: Herausfinden, ob Fenster sichtbar ist

  Alt 22. Nov 2016, 17:37
Wie ist es so (ungetestet)?
Delphi-Quellcode:
function GetVisibleStatus(const PForm: TForm): TVisibleStatus;
var
 Clip: Integer;
 hDC: THandle;
 ClipRect, ClientRect: TRect;
begin
  Assert(Assigned(PForm), 'Keine TCustomForm-Instanz übergeben');
  hDC := GetDC(PForm.Handle);
  if hDC <> 0 then
    try
      Clip := GetClipBox(hDC, ClipRect);
      
      case Clip of
        NULLREGION:
          Result := vsHidden; // Fenster ist komplett versteckt
        SIMPLEREGION:
          begin
            ClientRect := PForm.ClientRect; // Property statt protected Getter
            
            if EqualRect(ClipRect, ClientRect) then // vollständig sichtbar
              Result := vsVisible // ClientRect ist sichtbar
            else // teils sichtbar
              Result := vsPartVisible; // ClientRect ist sichtbar
          end;
        COMPLEXREGION: // Region besteht aus mehr als einem Rechteck, Fenster ist teils sichtbar
          Result := vsPartVisible;
      end;
    finally
      ReleaseDC(PForm.Handle, hDC);
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Herausfinden, ob Fenster sichtbar ist

  Alt 22. Nov 2016, 17:53
Das funktioniert jetzt glücklicherweise. Zwar nicht mit dem Hauptformular, aber da brauche ich die Funktion eh nicht.

Ist ein Fenster komplett sichtbar, kommt trotzdem vsPart zurück.
Ich rufe die Funktion eine Hand voll mal auf und vergleiche immer auf <> TVisibleStatus.vsHidden. Von daher ist es egal, ob vsVisible oder vsPart.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#4

AW: Herausfinden, ob Fenster sichtbar ist

  Alt 27. Dez 2016, 13:54
Schöne Sache, habe ich mir mal beiseite gelegt, kann ich bestimmt mal brauchen.

Die Frage sollte allerdings mal als "erledigt" gekennzeichnet werden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 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