Forcer le focus sur une fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Forcer le focus sur une fenêtre

Message par Octavius »

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 !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Forcer le focus sur une fenêtre

Message par Ar-S »

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
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

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à)
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour comme d'habitude si tu nous donnais un bout de code même s'il ne fonctionne pas ??
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Effectivement j'avais mal lu ton problème :oops:

Et avec un petit while ?
Tant que ta fenêtre popup est visible alors setactivewindow fenêtre popup
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

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...

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
Bonus; tu as le petit "bip" comme dans les requester :)
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.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Merci! Exactement ce que je cherchais! Je ne pensais pas que ça allait être aussi simple! :D
Répondre