AGB  ·  Datenschutz  ·  Impressum  







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

Abfrage, ob ein Control "on top" ist?

Ein Thema von Luuuz · begonnen am 15. Dez 2008 · letzter Beitrag vom 16. Dez 2008
Antwort Antwort
Luuuz

Registriert seit: 1. Dez 2008
6 Beiträge
 
#1

Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 17:41
Hallo!

Ich schreibe in Delphi7 eine Anwendung mit dynamisch generiertem GUI. Beim Synchronisieren dauert es leider recht lange, da ich sehr viele Controls geschachtelt(also auf TabSheets, Tabellen, usw) anlege.

Gibt es eine Möglichkeit zu überprüfen, ob ein Control gerade "on top" ist? Ich meine ob es für den User gerade sichtbar ist oder ob es sich auf einem TabSheet befindet, das gerade nicht angezeigt wird.

Ich bin für alle Tips dankbar!

Gruß
Tobias
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 17:48
Focus

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:16
Focus zeigt nur an, daß ein Control den Eingabefokus (Tastatur) hat ... aber dafür muß es nicht sichtbar (ich mein nicht Visible) sein ... es kann sich auch ruhig hinter einem anderem Control verstecken.

Abfrage ob Sichtbar aka nicht verdeckt wird bei vielen auch wieder schwer ... vorallem wenn andere Controls es nur Teilweise verdecken.

Aber Ob es sich auf einem TagSheet oder Panel oder wo auch immer befindet, welches grad ausgeblendet (inaktiv ist), dürft recht einfach sein.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:38
Hallo

Es gab hier mal ähnliche Beiträge:

Feststellen, ob ein Control sichtbar... oder per GetClipbox
Thomas
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:40
Zitat von himitsu:
Focus zeigt nur an, daß ein Control den Eingabefokus (Tastatur) hat ... aber dafür muß es nicht sichtbar (ich mein nicht Visible) sein ... es kann sich auch ruhig hinter einem anderem Control verstecken.
Upps und sorry für die unqualifizierte Antwort.

An der Stelle bin ich mir jetzt nicht ganz sicher, aber imho kannst du erst einmal auf Visible prüfen. Ich glaube, dass die Controls der nicht sichtbaren Seiten automatisch auf Visible False gesetzt werden.

Sonst kannst du prüfen, ob der Parent, der ja ein TabSheet ist gerade das aktive TabSheet ist. Wenn nicht ist alles klar. Wenn ja, dann wirds schon schwieriger. Ich denke, du kannst erstmal an hand der Position (Index) des Controls prüfen, an welcher Stelle der Conrols-Liste des Parent dein Control steht. Ich glaube, dass mit dem höchsten Index wird als letztes gezeichnet und liegt somit oben. Hast du den Index, dann mußt du prüfen, ob alle Controls mit einem höheren Index in der Liste dein Control überdecken. Das kannst du ganz einfach mit Funktion IntersectRect tun. Liegt eine Überschneidung der Rects der Conrols vor, so liefert die Funktion True zurück. Also prüfst du sozusagen, ob alle "höherwertigen" Controls in der Liste eine Überschneidung mit deinem Control-Rect haben. Ist dies der Fall, so ist dein Control ganz oder Teilweise verdeckt. Willst du den Fall der teilweisen Überdeckung mit auswerten, so musst du den Rückgabewert des resultierenden Rect aus der Funktion IntersectRect entsprechend verarbeiten und bewerten.

Ob das die sinnvollste Methode ist dein Problem zu lösen kann ich nicht sagen, aber besser wie meine erste Antwort ist es auf jeden Fall.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:41
'ne einfache Version nur auf Visible und Co. beruhend ...
Delphi-Quellcode:
Function isVisibled(C: TControl): Boolean;
  Begin
    Repeat
      Result := C.Visible
        and (not (C is TTabSheet) or (TTabSheet(C).PageControl.ActivePage <> C));
        // and (not (C is Txyz) or not Txyz(C).{visibled})
      C := C.Parent;
    Until not Assigned(C) or not Result;
  End;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:45
Zitat von oki:
Ich glaube, dass die Controls der nicht sichtbaren Seiten automatisch auf Visible False gesetzt werden.
Ist nicht der Fall. Visible bleibt True.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:52
Zitat von toms:
Zitat von oki:
Ich glaube, dass die Controls der nicht sichtbaren Seiten automatisch auf Visible False gesetzt werden.
Ist nicht der Fall. Visible bleibt True.
wäre ja och blöd ... stell dir mal vor die Übergeordnete Komponente überschreibt einfach Visible mit Valse, nur weil es diese Komponente grad nicht anzeigt ... was soll denn passieren wenn sie diese Komponente mal wieder anzeigen könnte ... soll es dann infach Visible auf True setzen?
(nur blöd, wenn der Programmierer selber die Komponente auf False gesetzt hate, weil er sie nicht anzeigen wollte und urplötzlich isse doch sichtbar, nur weil da irgendwas drin rumschrieb)
$2B or not $2B
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Abfrage, ob ein Control "on top" ist?

  Alt 15. Dez 2008, 18:56
Zitat von toms:
Zitat von oki:
Ich glaube, dass die Controls der nicht sichtbaren Seiten automatisch auf Visible False gesetzt werden.
Ist nicht der Fall. Visible bleibt True.
Ist heut nicht mein Tag.

Bin auch nur am rumspringen. Hausaufgaben der Kinder kontrollieren, Große zum Volleyball fahren ...
Ich hoffe ihr verzeiht mir. Der Rest sollte aber stimmen.

Guß oki

@himitsu: jaja, du mußt es ja nun nicht auch noch ausschlachten Gruß
42
  Mit Zitat antworten Zitat
Luuuz

Registriert seit: 1. Dez 2008
6 Beiträge
 
#10

Re: Abfrage, ob ein Control "on top" ist?

  Alt 16. Dez 2008, 16:31
Vielen Dank für eure Antworten!
Das geht ja alles sehr fix.

Ich durfte feststellen, dass ein Attribut von TWinControl mein Problem löst.

TWinControl(Obj).Showing
Zitat:
Die Eigenschaft Showing gibt an, ob das Steuerelement auf dem Bildschirm angezeigt wird.
Vielen Dank nochmal!
  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:18 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