AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen ob ein Fenster verdeckt wird

Ein Thema von dataspider · begonnen am 16. Nov 2021 · letzter Beitrag vom 17. Nov 2021
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#1

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 13:42
Kurzer Test mit 'nem Form, 'nem Button, 'nem TPageControl mit zwei Tabs und auf jedem Tab ein Panel.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Panel1.Visible then ShowMessage('Panel1'); // ist immer erfüllt, egal welcher Tab aktiv
  if Panel2.Visible then ShowMessage('Panel2'); // ist immer erfüllt, egal welcher Tab aktiv
  if Panel1.Parent.Visible then ShowMessage('Parent Panel1'); // ist nur erfüllt, wenn Tab 1 sichtbar
  if Panel2.Parent.Visible then ShowMessage('Parent Panel2'); // ist nur erfüllt, wenn Tab 2 sichtbar
end;
Es könnte also (mit etwas Glück) ausreichen, auf die Sichtbarkeit des Parents der Formulare abzufragen.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 13:47
Kurzer Test mit 'nem Form, 'nem Button, 'nem TPageControl mit zwei Tabs und auf jedem Tab ein Panel.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Panel1.Visible then ShowMessage('Panel1'); // ist immer erfüllt, egal welcher Tab aktiv
  if Panel2.Visible then ShowMessage('Panel2'); // ist immer erfüllt, egal welcher Tab aktiv
  if Panel1.Parent.Visible then ShowMessage('Parent Panel1'); // ist nur erfüllt, wenn Tab 1 sichtbar
  if Panel2.Parent.Visible then ShowMessage('Parent Panel2'); // ist nur erfüllt, wenn Tab 2 sichtbar
end;
Es könnte also (mit etwas Glück) ausreichen, auf die Sichtbarkeit des Parents der Formulare abzufragen.
So ist es.
Es reicht einfach wie im ersten Beitrag schon gesagt die aktive Seite vom Tab abzufragen alles andere ist Sinnlos.

Denn nur weil das Child Window in dem Fall als bsp. das Panel auf dem alle Komponenten abgelegt sind unsichtbar\in den Hintergrund geschaltet wird
bleiben die anderen Komponente trotzdem sichtbar.
Das betrifft also auch deine Formen die dort abgelegt sind.

Wenn ich meine Küchentür öffne dann sehe ich die Küche wird sie hingegen geschlossen dann sehe ich sie nicht mehr.
Bedeutet aber nicht das diese nun nicht mehr sichtbar ist. Es wird einem nur die Sicht darauf genommen.

Geändert von venice2 (16. Nov 2021 um 13:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.359 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 14:08
Ich habe mal mein "Spiel - Projekt" angehangen. (erfordert DevExpress)
So ist es vielleicht besser verständlich.
Der Code ist natürlich nicht sauber...

Ich verwende einen MouseHook, Screen.OnActiveContolChange und WMMouseActivate der BasisForm.
Damit kann ich fast alles bekommen.
Wenn ich mich aber z.B. mit der Tab - Taste bis zum Aktivieren einer Page vorarbeite,
kann ich mit den Cursortasten die aktive Page wechsel und bekomme davon nichts mit.
Daher wäre es ideal, wenn die Form irgendeine Nachricht erhalten würde.

Frank
Angehängte Dateien
Dateityp: zip FormHandling.zip (76,1 KB, 2x aufgerufen)
Frank Reim
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 14:17
Ich versuche es noch einmal.

Du hast keine Möglichkeit auf die Form hin zu prüfen ob diese Sichtbar\Verdeckt ist oder nicht.
Denn Sichtbar ist sie immer auch im verdeckten zustand.
Außer wie @Delphi.Narium schon sagte über den Visible Status des entsprechenden Panels oder direkt über Tab\Seite.
Was hält dich davon ab einfach eine Variable BOOL mit welchen Namen auch immer einzusetzen und den Stand daraufhin zu prüfen welche Seite gerade aktiv ist.

Mein Rat!
Lasse dir diesbezüglich etwas anderes einfallen.

Bsp.
EDIT:
Delphi-Quellcode:
const
  F_VISIBLE = WM_USER + 100;
var
  bVisibleState: BOOL;
...
// Bei jedem Klick auf ein Panel ob über Tasten oder Maus sendest du eine Message an deine Winproc
// Auf bVisibleState hin prüfen und welche Tab Seite aktiv ist

SendMessage(Self.Handle, F_VISIBLE, bVisibleState, LParam);

// In der Winproc wertest du jetzt aus.
  case (Msg) of
    F_VISIBLE:
      //tu was
oder du erstellst dein eigenes Event.

Bin raus..

Geändert von venice2 (16. Nov 2021 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#5

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 14:35
Mir ist (vermutlich) die Fragestellung noch nicht klar geworden:

Möchtest Du im Formular nachfragen, ob das Formular für den Anwender sichtbar ist, sich also auf der aktiven Seite des PageControl befindet?

Oder möchtest Du beim Wechsel der aktiven Seite des PageControls im Formular quasi eine Reaktion der Art "Ups, ich bin gerade sichtbar geworden" bzw. "och nö, man kann mich ja garnichtmehr sehen" auslösen?

Das Erste sollte mit meinem Vorschlag funktionieren.

Das zweite könntest Du eventuell durch das Schicken einer eigenen Message beim Seitenwechsel auslösen. Kommt diese Message, prüfen die empfangenden Formulare jeweils analog zu meinem Vorschlag.

Als "Versandort" für diese Message fiele mir da nur das OnChange-Ereignis des PageContols ein.

Geändert von Delphi.Narium (16. Nov 2021 um 15:01 Uhr) Grund: Schreibfehler ...
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.359 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 14:55

Oder möchtest Du beim Wechsel der aktiven Seite des PageControls im Formular quasi eine Reaktion der Art "Ups, ich bin gerade sichtbar geworden" bzw. "och nö, man kann mich ja garnichtmehr sehen" auslösen?
Genau das...
Sorry, dass das nicht verständlich rüber kam.
Ich hatte die Hoffnung, dass ich mir die Zuweisung des OnActivePageChanged bei jedem PageControl ersparen kann.

Vielen Dank an alle Beteiligten!

Frank
Frank Reim
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#7

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 15:01
Zitat:
Ich hatte die Hoffnung, dass ich mir die Zuweisung des OnActivePageChanged bei jedem PageControl ersparen kann.
Wieviele hast Du denn davon?

Ein abgeleitetes PageControl machen, das schon das entsprechende Ereignis (mit allem Drum und Dran) enthält?

Ok, das hieße dann auch einmal durch den gesamten Quelltext durch und entsprechend anpassen.

Oder das Ereignis zur Laufzeit zuweisen, im FormCreate (o. ä.).
  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 07:36 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