Seite 1 von 1
[teils gelöst] wxApp::IsActive unzuverlässig?
Verfasst: Freitag 8. Februar 2008, 22:01
von snakeseven
Hi,
teste mit
, ob meine Applikation gerade aktiv ist, oder nicht. Wenn ja, wird der Windows-Style auf
geswitched, ansonsten nicht. Um zu verhindern, daß neue, dynamisch generierte Fenster andere, gerade aktive Applikationen überpinseln.
Das klappt ne Weile auch ganz gut, dann aber irgendwann nicht mehr. Ohne meine Applikation auch nur "angerührt" zu haben, setzt sie sich entweder selbständig wieder "active", obwohl sie das eindeutig gerade nicht ist, oder
arbeitet unzuverlässig. Wat nu?
Grüße, Seven
Verfasst: Samstag 9. Februar 2008, 00:27
von noise
Hi, kann das hier nicht nachvollziehen und wüste jetzt nicht wo das Problem ist. Ich bin mir ziemlich sicher das es nicht an `IsActive()` liegt.
Könntest du ein Minimal Beispiel pasten?
Verfasst: Samstag 9. Februar 2008, 07:53
von snakeseven
Moin noise,
Ich habe ein Mainwindow, über welches zeitgesteuert ein Popup Window gelegt werden soll. Dieses soll, wenn meine Applikation auf dem Rechner die Aktive ist, immer STAY_ON_TOP sein, ansonsten nicht. Bevor ich das Popup generiere, frage ich daher ab, ob meine App. gerade die Aktive ist, oder nicht:
Code: Alles auswählen
def create_clipwindow(self):
global CW
if app.IsActive():
self.windowstyle = wx.MINIMIZE_BOX | wx.STAY_ON_TOP
else:
self.windowstyle = wx.MINIMIZE_BOX
CW = Clipwindow()
class Clipwindow(wx.MiniFrame):
def __init__(self):
winpos = FF.GetPosition()
p1 = winpos[0]
p2 = winpos[1] + 112
wx.MiniFrame.__init__(self, None, -1, title="", pos=(p1, p2), size=wx.Size(164, 211), style=SJ.windowstyle)
clippanel = wx.Panel(self, pos=(0,0), size = (164, 211))
self.flash = FlashWindow(clippanel, pos=(0,0), size=wx.Size(164, 211))
self.flash.LoadMovie(0, SJ.clips[0])
SJ.clipwindow = True
self.Show()
Und das geht eine Weile auch gut, bis sich mein Popup plötzlich und unerwartet über die andere, gerade aktive Applikation legt.
Und das verstehe ich nicht. Meine App. ist nicht die Aktive und dennoch zeigt 'IsActive' sie als aktiv an?
Gruß, Seven
Verfasst: Samstag 16. Februar 2008, 16:22
von snakeseven
Das Problem war nicht das Clipwindow, wie ich dachte. Das Problem machte ein zweites, dynamisch erzeugtes Fenster, welchem kein MiniFrame zugrunde lag. Jetzt sind beide MiniFrames und das Problem taucht nicht mehr auf. Die Ursache, warum IsActive() ein im Hintergrund dynamisch erzeugtes Frame falsch erkennt, ist damit aber noch nicht geklärt!?
Grüße, Seven