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

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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

Beitragvon snakeseven » Freitag 8. Februar 2008, 22:01

Hi,
teste mit [code=]if app.IsActive() [/code], ob meine Applikation gerade aktiv ist, oder nicht. Wenn ja, wird der Windows-Style auf [code=]wx.STAY_ON_TOP[/code] 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=]IsActive()[/code] arbeitet unzuverlässig. Wat nu?

Grüße, Seven
Zuletzt geändert von snakeseven am Samstag 16. Februar 2008, 16:22, insgesamt 2-mal geändert.
noise
User
Beiträge: 62
Registriert: Donnerstag 7. Februar 2008, 00:15

Beitragvon noise » Samstag 9. Februar 2008, 00:27

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?
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Samstag 9. Februar 2008, 07:53

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
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Samstag 16. Februar 2008, 16:22

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder