Seite 1 von 1

[teils gelöst] wxApp::IsActive unzuverlässig?

Verfasst: Freitag 8. Februar 2008, 22:01
von snakeseven
Hi,
teste mit

Code: Alles auswählen

if app.IsActive() 
, ob meine Applikation gerade aktiv ist, oder nicht. Wenn ja, wird der Windows-Style auf

Code: Alles auswählen

wx.STAY_ON_TOP
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

Code: Alles auswählen

IsActive()
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