problème avec StickyWindow

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

problème avec StickyWindow

Message 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?
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: problème avec StickyWindow

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: problème avec StickyWindow

Message 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.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: problème avec StickyWindow

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: problème avec StickyWindow

Message par nico »

Je vais attendre un peu et voir déjà ce que ça donne, merci.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: problème avec StickyWindow

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: problème avec StickyWindow

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: problème avec StickyWindow

Message 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.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: problème avec StickyWindow

Message par Le Soldat Inconnu »

excuse moi mais je n'ai pas compris ton besoin.

Que cherches tu à faire ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: problème avec StickyWindow

Message 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à. :)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: problème avec StickyWindow

Message 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:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: problème avec StickyWindow

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: problème avec StickyWindow

Message par MLD »

Salut nico

C'est aussi une solution.
Ton problème est il résolut :?: :?:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: problème avec StickyWindow

Message 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.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: problème avec StickyWindow

Message 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
Répondre