Page 1 sur 1

problème avec StickyWindow

Publié : mer. 01/sept./2010 16:12
par nico
Il arrive parfois que StickyWindow ne fonctionne pas correctement; la fenêtre reste en arrière plan.

C'est assez rare mais embêtant!

J'ai vu que le soldat en parlait dans un de ses posts mais je ne le retrouve pas, il y a t' il une solution?

Re: problème avec StickyWindow

Publié : mer. 01/sept./2010 16:46
par MLD
Bonjour nico
Ceci mes déja arrivée l'orsque j'utilise plusieurs fenêtres avec StickyWindow.
C'est un problème de priorité. J'ai résolut ce problème en jouant avec le focus des fenêtres (en fait en désactivant par le programme le focus des fenêtres inférieures)
Mais si c'est deux programmes différents, je n'ai pas de solution.
Michel

Re: problème avec StickyWindow

Publié : jeu. 02/sept./2010 16:52
par nico
Le problème, c'est que c'est pour une fenêtre qui est caché au départ et lorsque je l'affiche je ne l'active pas donc la fenêtre n'a jamais le focus.

J'ai quand même mis un setfocus() lors de la création mais je ne sais pas si ça un sens.

Re: problème avec StickyWindow

Publié : jeu. 02/sept./2010 18:36
par Le Soldat Inconnu
Comme ça, c'est mort. On ne peux pas utiliser stickywindow() au milieu d'un code pour passer une fenêtre en arrière plan au premier plan.
Windows sécurise l'affaire visiblement.

La seule solution que j'ai trouvé est de masquer toutes les autres fenêtres. Comme pour les alarmes de mon agenda par exemple.

je lance

Code : Tout sélectionner

SendMessage_(FindWindow_("Shell_TrayWnd", NULL), $111, 419, 0) ; Réduire toutes les fenêtres
pour afficher le bureau puis j'affiche ma fenêtre

sinon, il faut recréer ta fenêtre quand tu as besoin de la mettre au premier plan.

J'espère que ça va t'aider

Re: problème avec StickyWindow

Publié : jeu. 02/sept./2010 20:16
par nico
Je vais attendre un peu et voir déjà ce que ça donne, merci.

Re: problème avec StickyWindow

Publié : jeu. 02/sept./2010 23:32
par Guimauve
Et bien moi sous Ubuntu j'ai également un problème avec StickyWindow(). En effet, lorsque la fenêtre principale est au premier plan et qu'elle est caché afin d'afficher une fenêtre secondaire lorsque le programme revient à la fenêtre principale elle ne reste plus au premier plan. C'est un brin agaçant et pour le moment, je n'ai pas trouvé de solution.

A+
Guimauve

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 7:43
par MLD
Salut nico
Regarde dans le SDK Window la fonction BringWindowToTop.
La doc que j'ai (mais qui date un peu) dit Place une fenêtre au premier plan et la superpose aux autres fnêtres se chevauchant a l'écran. S'il s'agit d'une fenêtre en incrustation au dessus des autres fenêtres de premier niveau, cela a pour effet de l'activer. (fin de citation.). En C fait partie de lib winuser.h.
Michel

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 12:43
par nico
Ma fenêtre ne doit en aucun cas avoir le focus mais lors de sa création je peux l'afficher temporairement avec des dimensions très réduite puis la cacher.

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 14:36
par Le Soldat Inconnu
excuse moi mais je n'ai pas compris ton besoin.

Que cherches tu à faire ?

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 16:07
par nico
Mettre une fenêtre (qui sert juste pour afficher des informations) au premier plan, elle est cachée au départ puis je l'affiche quand j'en ai besoin avec ShowWindow_(WindowID(#Window_Popup),#SW_SHOWNOACTIVATE) donc elle ne prend pas le focus en s'affichant; c'est très important.

Ce que je fais pour l'instant, je crée la fenêtre visible mais je l'affiche hors écran en y négatif, je lui donne le focus, je fais un sticky puis je la cache.

Voilà. :)

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 17:17
par MLD
Un début de solution :?: :?:

Code : Tout sélectionner

Enumeration
#fen1
#fen2
#bt1
#bt2
EndEnumeration



OpenWindow(#fen1 , 0, 0, 650, 440,  "fen1",#PB_Window_BorderLess | #PB_Window_ScreenCentered|#PB_Window_SystemMenu ) 
;StickyWindow(#fen1 , 1)
ButtonGadget(#bt1, 30, 320,100, 20, "Apparait")
ButtonGadget(#bt2, 140, 320,100, 20, "disparait")
Repeat
  Event = WaitWindowEvent()
   Select EventGadget()
    Case #bt1
     OpenWindow(#fen2 , 0, 0, 150, 100,  "fen2",#PB_Window_BorderLess | #PB_Window_ScreenCentered|#PB_Window_SystemMenu |#SW_SHOWNOACTIVATE)
     StickyWindow(#fen2 , 1)
     SetActiveWindow(#fen1)
    Case #bt2
     CloseWindow(#fen2)
   EndSelect
  
  Until event = #PB_Event_CloseWindow

Mais si il y a 2 Sticky ça ne marche pas :cry:

Re: problème avec StickyWindow

Publié : ven. 03/sept./2010 17:52
par nico
Je ne suis pas dans cette configuration, donc pas de problème.

Par contre, j'ai remarqué que le stickywindow met au premier plan mais aussi active la fenêtre en même temps, donc je ne pense pas que setactivewindow soit utile.

Voici un code qui fonctionne même si la fenêtre mère est au premier plan:

Code : Tout sélectionner

Enumeration
  #fen1
  #fen2
  #bt1
  #bt2
EndEnumeration

OpenWindow(#fen2 , 0, 0, 150, 100,  "fen2",#PB_Window_BorderLess | #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible )

OpenWindow(#fen1 , 0, 0, 650, 440,  "fen1",#PB_Window_BorderLess | #PB_Window_ScreenCentered|#PB_Window_SystemMenu ) 
StickyWindow(#fen1 , 1)
ButtonGadget(#bt1, 30, 320,100, 20, "Apparait")
ButtonGadget(#bt2, 140, 320,100, 20, "disparait")
Repeat
  Event = WaitWindowEvent()
  Select EventGadget()
    Case #bt1
      SetWindowPos_(WindowID(#fen2),#HWND_TOPMOST,0,0,0,0,#SWP_NOACTIVATE|#SWP_NOMOVE|#SWP_NOSIZE|#SWP_SHOWWINDOW)
    Case #bt2
      HideWindow(#fen2,1)
  EndSelect
  
Until event = #PB_Event_CloseWindow

Re: problème avec StickyWindow

Publié : sam. 04/sept./2010 10:51
par MLD
Salut nico

C'est aussi une solution.
Ton problème est il résolut :?: :?:

Re: problème avec StickyWindow

Publié : sam. 04/sept./2010 10:58
par Le Soldat Inconnu
A d'accord, la solution pour moi est la suivante : il faut pas masqué la fenêtre mais la sortir de l'écran.
Car masqué une fenêtre "premier plan" en espérant qu'elle revienne au plan, ca ne fonctionne pas à tous les coups, mais alors pas du tout.
je te ferais un exemple plus tard, j'ai pas le temps la.
Prend bien le temps de faire une toolwindow, ça évitera à Windows de vouloir remettre la fenêtre la zone de l'écran alors qu'on veut la laisser en dehors.

Re: problème avec StickyWindow

Publié : sam. 04/sept./2010 13:23
par MLD
Le Soldat Inconnu a écrit : Car masqué une fenêtre "premier plan" en espérant qu'elle revienne au plan, ca ne fonctionne pas à tous les coups, mais alors pas du tout.
Pourquoi. :?:
Ce constat je l'ai fait aussi, mais rarement. C'est pour cela que dans mon code, je redessine la fenêtre a chaque apparition. :D