Seite 1 von 1

Reaktion wenn Fenster minimiert ist

Verfasst: 17.12.2006 23:04
von fastbit
Hallo Leute,

ich habe ein Problem:

Ich hab n kleines chat programm geschrieben und nun soll mein Client auf eingehende Nachrichten ragieren, wenn das Fenster minimiert in der Taskleiste liegt.

Ich hab schon mit IsIconic_ aus der WIN API herumexperimentiert aber es geht nicht.

Hat mir vieleicht jemann n tip oder n codeschnipsel wie das geht?

Also wenn das Fenster minimiert ist oder den Fokus nicht hat, dann soll es wieder aufgehen oder einen Sound spielen, wenn eine Mess reinkommt.

Vielen Dank an Alle

Andi

Verfasst: 17.12.2006 23:12
von Kaeru Gaman
nuja.. du musst das ganze schon richtig ansetzen...

eine möglichkeit ist, in jedem schleifendurchlauf erstmal zu checken, ob dein fenster den fokus hat.

Code: Alles auswählen

If GetFocus_()<>WindowID(MeinFensterNr) 
    Focus = 0 
  Else 
    Focus = 1 
  EndIf
und du wirst ja in deiner hauptschleife irgendwo darauf reagieren, dass ne nachricht reinkommt...
wenn also ne nachricht reinkommt, und dein Flag Focus ist 0,
dann spielste nen sound ab....

PS:
vielleicht hat das mit IsIconic_() nicht geklappt, weil du nicht
das Handle sondern die PB-Nummer des Fensters angegeben hast?

Code: Alles auswählen

IsIconic_(WindowID(MeinFensterNr))
sollte funktionieren.

Verfasst: 17.12.2006 23:33
von ts-soft

Code: Alles auswählen

If OpenWindow(0, 100, 100, 640, 480, "", #PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_MoveWindow, #PB_Event_SizeWindow
        Iconic = GetWindowState(0)
        Select Iconic
          Case #PB_Window_Normal   : Debug "Normal"
          Case #PB_Window_Minimize : Debug "Minimiert"
          Case #PB_Window_Maximize : Debug "Maximiert"
        EndSelect
      Case #PB_Event_ActivateWindow
        Debug "wurde aktiviert"
    EndSelect
  ForEver
EndIf
Bin gerade unter Linux, bzw. gibt ja keinen Grund API zu nehmen

Verfasst: 17.12.2006 23:38
von Kaeru Gaman
@ts
hast du auch ne non-api lösung für gotfocus/lostfocus?

viele chat-maschinen piepen auch, wenn ihr fenster normal ist,
aber im hintergrund, also, nicht den fokus hat...

Verfasst: 17.12.2006 23:42
von ts-soft
Kaeru Gaman hat geschrieben:@ts
hast du auch ne non-api lösung für gotfocus/lostfocus?

Code: Alles auswählen

Case #PB_Event_ActivateWindow 
lostfocus geht zur Zeit wohl nicht.
Was heißt hier Lösung, das steht alles in der Hilfe :lol:

Verfasst: 17.12.2006 23:46
von Kaeru Gaman
> lostfocus geht zur Zeit wohl nicht.

ja eben das ist das problem..

ich bin damit nur deshalb ohne API klargekommen, weil ich nen windowedscreen hatte,
da reagiert IsScreenActive() auf das lostfocus....

aber ohne screen hat man probleme mit nem focuscheck...

eigentlich widersinnig, dass GotFocus einen Eventbezeichner hat,
LostFocus jedoch nicht.

Verfasst: 17.12.2006 23:55
von ts-soft
Naja, #PB_Event_ActivateWindow ist ein normalles Windows-Ereignis,
welches man fast immer braucht. Z.B. ein Editor, dann kann man dort prüfen
ob die Zwischenablage etwas enthält.
Bei lostfocus wüßte ich nicht, wozu das nütze sein soll, abgesehen von Chat,
sowas progg ich nicht :mrgreen:

Verfasst: 18.12.2006 00:06
von edel
GetActiveWindow duerfte dafuer doch reichen .

Beispiel :

Code: Alles auswählen

    [...]
    
    net_event = NetworkClientEvent()
    
    If net_event = #PB_NetworkEvent_Data
      
      ReceiveNetworkData([...])
      
      If GetActiveWindow() <> #fenster
        MessageRequester("Willkommen!","Sie haben Post")
      EndIf 
      
    EndIf
    
    [...]

Verfasst: 18.12.2006 00:46
von Kaeru Gaman
@edel

hm... hatte ich das jetzt übersehen, oder hatte es nicht richtig funktioniert?
muss ich mal austesten, thnx


> Bei lostfocus wüßte ich nicht, wozu das nütze sein soll, abgesehen von Chat,
> sowas progg ich nicht

z.b. wenn du in deinem fenster ne kontinuierliche datenausgabe hast,
sowas wie z.b. Martin66xxx mit seiner meßvorrichtung...
dieses aufwendige aktualisieren muss man eigentlich nur dann vornehmen,
wenn das fenster auch den fokus hat.

klar, bei GotFocus schalte ich es ein... aber ich muss es ja zuvor abschalten können... ;)

Vielen Dank!!!

Verfasst: 18.12.2006 10:28
von fastbit
Vielen Dank an Euch alle!!!

Ich denke damit kriege ich es hin!!1

Keep on coding!

Andi