AGB  ·  Datenschutz  ·  Impressum  







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

Feststellen, ob ein Control sichtbar...

Ein Thema von hermannhass · begonnen am 1. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#1

Feststellen, ob ein Control sichtbar...

  Alt 1. Mär 2007, 22:43
Hallo
ich benutze Delphi 7 und möchte gerne feststellen, ob eine Komponente(twincontrol) zur zeit sichtbar ist oder nicht. Oder halt die zustandsänderung abfangen.
Zum beispiel ob es auf einem anderen tabcontrol ist.
Visible (cm_visiblechanged)geht nicht, da es auch true ist, wenn eine anderer tabsheet aktiv ist.
Grund: habe rechenintensive processe, dir nicht "laufen" müssen, wenn das element nicht sichtbar ist. z.B. eine animiertes gif oder eine Movie....
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Feststellen, ob ein Control sichtbar...

  Alt 1. Mär 2007, 23:04
Hallo,

für TWinControls könnte das funktionieren:

Delphi-Quellcode:
function IsVisible (aControl: TWinControl): Boolean;
begin
  Result := (FindVCLWindow(aControl.ClientOrigin) = aControl);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#3

Re: Feststellen, ob ein Control sichtbar...

  Alt 1. Mär 2007, 23:45
Danke, mit nem twincontrol klappt es, mit meinem abgewandelten TGraphicControl natürlich nicht.
Wäre kein beinbruch, kann ich simulieren....
Aber kann ich die Zustandänderung irgendwie abfangen.
also wenn von sichtbar auf unsichbar, dann "stoppe" eine Process sonst umgekehrt.
irgendeine Message, die aich abfangen kann und dann teste
beim sichtbarwerden das WM_Paint,aber beim "verschwinden"....
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Feststellen, ob ein Control sichtbar...

  Alt 2. Mär 2007, 01:19
Die Message, die du abfangen müsstest ist
CM_VisibleChanged.

Diese Message sendet das Control an sich selbst, wenn das Flag geändert wird. Desweiteren stellt jedes Control eine eigene dynamische Methode bereit, welche aufgerufen wird, wenn das Flag geändert wird.
Diese Methode heißt wohl

procedure VisibleChanging; dynamic

und macht bei TControl nichts.

Leite also von deinen gewünschten Komponenten, welche Nachfahren von TControl sind, neue Komponenten ab und fange die Message ab oder überschreibe ganz einfach die Methode. Den Rest findest du selbst heraus.

Ansonsten solltest du mit dem Umschalten deines Sheets eine eigene Message senden, welche die bestimmten Actionen Ein- bzw. ausschaltet.

Gruß Frank
  Mit Zitat antworten Zitat
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#5

Re: Feststellen, ob ein Control sichtbar...

  Alt 2. Mär 2007, 02:02
Das VisibleChanging brint mich nicht weiter, weder bei einem Twincontrol(z.B. ein TEdit) noch bei meinem Tgraphiccontrol( ein Timage).
VisibleChanging kommt beim ändern der Visible eigenschaft. und die ändert sich nicht, wenn z.B. ein anderes tabcontrol aufgerufen wird und das "Control" quasi verschwindet....
Das "wiedererscheinen" kann ich mit dem wm_paint abfangen, nur das verschwinden nicht.
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Feststellen, ob ein Control sichtbar...

  Alt 2. Mär 2007, 03:30
Vielleicht hilft dir die Message

CM_ShowingChanged

weiter?

Weiß jetzt aber nicht sicher, ob diese Message auch an TGraphicControl gesendet wird. Glaube aber eher nicht.
Dort kannst du dann das Flag Showing abfragen, welches aber nur ab TWinControl verfügbar ist.
  Mit Zitat antworten Zitat
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#7

Re: Feststellen, ob ein Control sichtbar...

  Alt 2. Mär 2007, 03:57
Danke für Eure Hilfe...
CM_ShowingChanged wird auch nur beim ersten Show aufgerufen.
kann das fenster oder den Tab verstecken und wiederaufrufen, nix tut sich.
dann muss ich mich über die Parents "hochhangeln" und prüfen, ob diese sichtbar sind.
mühsam und viele sonderfälle, aber hilft nix.
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Feststellen, ob ein Control sichtbar...

  Alt 2. Mär 2007, 11:46
Hallo,

nicht gleich die Flinte ins Korn werfen. Also: Wenn du wirklich ein TTabControl verwendest, dann mußt du, wenn die Komponenten verschwinden sollen, die Eigenschaft Visible der Komponenten verwenden. Und dann verstehe ich dein Problem nicht.
Anders sieht das aus bei einem TPageControl. Wenn du dieses verwendest, dann verstehe ich dein Problem, daß du da mit Messages nicht weiter kommst. Doch dafür gibt es beim TPageControl den Event 'OnChange'. Damit lassen sich bei Seitenwechsel, welcher durch einen Klick auf das Tab ausgelöst wurde, diverse Programme aus- bzw. einschalten, was einer ereignisgesteuerten Anwendung schon sehr nahekommt.
Auch kannst du, um feststellen zu können, welche Page Eigentümer deiner Komponente ist, die Eigenschaft Tag der Komponenten verwenden. Dann brauchst du dich nicht durch die Parents zu hangeln, sondern hast direkten Zugriff auf die Page. Doch diesen Tag-Wert mußt du manuell im Constructor oder wo auch immer setzen.
  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 19:48 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