J'ai un programme avec plusieurs fenêtres : une fenêtre principale, et d'autres fenêtres secondaires que j'ouvre et que je ferme.
Je voudrais que lorsqu'une fenêtre secondaire est ouverte, le programme force le focus à rester sur cette fenêtre.
Je connais la commande StickyWindow(), mais ce n'est pas ce que je cherche : la fenêtre reste au premier plan, mais elle n'est pas active ; moi je veux qu'elle reste toujours active.
Grosso modo, je voudrais donc que ces fenêtres secondaires réagissent comme les fenêtres des MessageRequester().
Comment faire ? Je suppose qu'il faut passer par l'API... Merci de votre aide !
Forcer le focus sur une fenêtre
Re: Forcer le focus sur une fenêtre
Y'aurait pas moyen d'utiliser hidewindow et setactivewindow en jouant avec tes fenêtres secondaires ?
Code : Tout sélectionner
If HideWindow(#fenetremessage,1) ; lorsque la fenetre popup est cachée
SetActiveWindow(#FenetrePrincipale) ; rend active la fenêtre principale
EndIf
HideWindow() c'est pour la rendre invisible, je suppose que tu voulais parler de GetActiveWindow() ?
J'ai déjà essayé, mais je n'obtiens pas le résultat que je veux, ça permet à mon programme de faire une courte boucle et de prendre en compte les événements de la boucle principale avant de re-rendre active la fenêtre secondaire.
Les MessageRequester interdisent le perte de focus (avec un petit "bip" !), je veux en fait la même chose pour mes fenêtres secondaires.
(Pardon de ne pas poster de code, mais je n'ai pas PB sur cet ordinateur-là)
J'ai déjà essayé, mais je n'obtiens pas le résultat que je veux, ça permet à mon programme de faire une courte boucle et de prendre en compte les événements de la boucle principale avant de re-rendre active la fenêtre secondaire.
Les MessageRequester interdisent le perte de focus (avec un petit "bip" !), je veux en fait la même chose pour mes fenêtres secondaires.
(Pardon de ne pas poster de code, mais je n'ai pas PB sur cet ordinateur-là)
Avec la fonction DisableWindow(#win,etat) c'est simple et efficace
Exemple : Ci-dessous une procedure ouvrant une fenêtre secondaire qui sera seule active, prenant le pas sur la principale jusqu'à sa fermeture. Peut-être appelée quand on veut dans le code principal et reste autonome. Ce qui est fait avec peut-être récupéré très simplement de plusieurs façons...
Bonus; tu as le petit "bip" comme dans les requester 
Exemple : Ci-dessous une procedure ouvrant une fenêtre secondaire qui sera seule active, prenant le pas sur la principale jusqu'à sa fermeture. Peut-être appelée quand on veut dans le code principal et reste autonome. Ce qui est fait avec peut-être récupéré très simplement de plusieurs façons...
Code : Tout sélectionner
Procedure Secondaire()
If OpenWindow(#Win2,0,0, 500, 300, "Fenêtre secondaire",#PB_Window_SystemMenu | #PB_Window_ScreenCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win2))=0
End
EndIf
DisableWindow(#WIN1,1) ; désactive la fenêtre principale
;tu ne peux que te servir de la secondaire tant qu'elle n'est pas fermée
;
;
;ton code
;
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
;
;ton code
;
;
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
CloseWindow(#Win2) ; ferme la secondaire
DisableWindow(#WIN1,0); pour activer la principale
EndProcedure

Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.