Page 1 sur 1

Rendre une fenetre modale, comme monsieur VB[Résolu]

Publié : mer. 02/mai/2007 14:05
par Kwai chang caine
Bonjour à tous

J'ai un trou de mémoire ou je ne sais meme pas si je l'ai déjà fait. :oops:
J'ai fait une recherche sur modal et il en ressort peau de chagrin.

C'est tellement bete comme question, que je me dit que ce doit bien etre ecrit quelque part......et j'ai rien trouvé dans l'aide non plus.
J'ai encore du lire à coté :oops:

Comment fait on pour rendre une fenetre modale ?

Merci de votre aide
Bonne journée

Publié : mer. 02/mai/2007 14:31
par Progi1984
Recherche SetWindowTool ou SetToolWindow ou Window AND Tool

Publié : mer. 02/mai/2007 15:41
par Kwai chang caine
Bonjour progi1984

J'ai fait tout comme tu m'a dit, et j'ai pas trouvé de quoi remplir un dictionnaire, avec ces mots :D

En tout cas merci de ton aide

Publié : mer. 02/mai/2007 16:25
par minirop
j'ai trouvé un moyen de simuler une fenêtre modale :

Code : Tout sélectionner

; début de la boucle d'écoute de la fenètre principale
	DisableWindow(0,1)
	If OpenWindow(1,0,0,250,100,"Options",#PB_Window_WindowCentered,0)
		; blablabla dont la boucle d'écoute de cette fenêtre + createadgetlist
		CloseWindow(1)
	EndIf
	DisableWindow(0,0)
;fin de la boucle

Publié : mer. 02/mai/2007 16:42
par Kwai chang caine
Ah oui, tu veux dire si j'ai bien compris, de rendre la fenetre principale inactive, comme ça l'autre devient modale par defaut.
C'est malin...... et j'y aurais pas pensé. :wink:
Le bleme c'est que j'ai une palenquée de fenetre et je ne sais pas toujours quelle est la fenetre qui est derriere la "Modale".
ça fait une gestion a tenir, j'aurais préféré plus simple.
Mais ton idée est bonne à retenir.

Pour une fois VB est meilleur sur ce coup la :roll:

Autrement j'ai trouvé entretemps dans mes archives ça:

Code : Tout sélectionner

SetWindowPos_(WindowID(#XXX), -1, 0, 0, 0, 0, #SWP_NOSIZE)
ça met la fenetre au premier plan.
Je ne sais pas si c'est exactement pareil que modale ????

Si quelqu'un a mieux ou veux donner son avis.
Comme dab, je suis preneur

Publié : mer. 02/mai/2007 16:46
par minirop
Kwai chang caine a écrit :ça met la fenetre au premier plan.
Je ne sais pas si c'est exactement pareil que modale ????
non, çà a mets juste au 1er plan (la même chose que mon code sans les DisableWindow

Publié : mer. 02/mai/2007 16:51
par Kwai chang caine
Bon bah d'accord. :(
Restons pour l'instant sur ton idée.

Merci

Publié : jeu. 03/mai/2007 8:31
par Kwai chang caine
Personne d'autre a une petite idée ?????

Publié : jeu. 03/mai/2007 8:57
par Progi1984
Essaie ce code :

Code : Tout sélectionner

OpenWindow(0, 0, 0, 219, 85, "TEST",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_TOOLWINDOW)
ResizeWindow(0,#PB_Ignore,#PB_Ignore,220,100) : ShowWindow_(WindowID(0),#SW_SHOW)

Repeat
  ev= WaitWindowEvent()
Until ev=#PB_Event_CloseWindow 

Publié : jeu. 03/mai/2007 10:06
par Kwai chang caine
Bonjour Progi1984

Je te remercie de te pencher à nouveau sur mon probleme :wink:

J'ai éssayé ton code.
J'ai rajouté une autre fenetre pour voir si la tienne etait modale.
Et malheureusement ça ne marche pas chez moi. :cry:

Quand je clique sur la fenetre pricipale, chez bilou ça fait "ding" et tu ne peux pas lui mettre le focus.
Le focus reste toujours sur la modale.
T'es obligé de fermer la modale pour avoir acces a la principale ou les autres d'ailleurs.

Par contre dans ton code si on clique la principale, la modale disparait 8O

Donc on peux dire qu'elle est pas si modale que ça, la modale :D

Code : Tout sélectionner

OpenWindow(1, 0, 0, 319, 185, "Fenetre principale",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
OpenWindow(0, 0, 0, 219, 85, "Fenetre modale",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_TOOLWINDOW) 
ResizeWindow(0,#PB_Ignore,#PB_Ignore,220,100) : ShowWindow_(WindowID(0),#SW_SHOW) 

Repeat 
 ev = WaitWindowEvent() 
Until ev = #PB_Event_CloseWindow 
C'est dingue qu'une fonction aussi basique que ça en VB n'existe pas en pure 8O

Publié : jeu. 03/mai/2007 11:51
par Backup
tiens et ça ? ca te vas ? :D


OpenWindow (1, 0, 0, 319, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )
OpenWindow (0, 0, 0, 219, 85, "Fenetre modale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )
SetWindowLong_ ( WindowID (0), #GWL_EXSTYLE , GetWindowLong_ ( WindowID (0), #GWL_EXSTYLE )|#WS_EX_TOOLWINDOW)
ResizeWindow (0, #PB_Ignore , #PB_Ignore ,220,100) : ShowWindow_ ( WindowID (0), #SW_SHOW )
EnableWindow_ ( WindowID (1), 0) ; <----- voila ce qui rend modal ! : D
Repeat
    ev = WaitWindowEvent ()
Until ev = #PB_Event_CloseWindow

Publié : jeu. 03/mai/2007 12:32
par Backup
j'ajouterai que d'apres l'api_doc
The SetSysModalWindow function is not implemented in the Win32 API. The new input model does not allow for System Modal windows.
donc avant il existait une fonction toute faite, mais qui n'est plus présente !! :)

Publié : jeu. 03/mai/2007 13:04
par Kwai chang caine
Bonjour DOBRO

J'avais ecris ça à Minirop:
Kwai chang caine a écrit :Ah oui, tu veux dire si j'ai bien compris, de rendre la fenetre principale inactive, comme ça l'autre devient modale par defaut.
C'est malin...... et j'y aurais pas pensé. :wink:
Le bleme c'est que j'ai une palenquée de fenetre et je ne sais pas toujours quelle est la fenetre qui est derriere la "Modale".
ça fait une gestion a tenir, j'aurais préféré plus simple.
Mais ton idée est bonne à retenir.
C'est un peu le meme systeme que tu as utilisé, non ??
Car en fait tout le reste ne sert à rien :cry:

Code : Tout sélectionner

OpenWindow (1, 0, 0, 319, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered ) 
OpenWindow (0, 0, 0, 219, 85, "Fenetre modale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered ) 
EnableWindow_(WindowID (1), 0) ; <----- voila ce qui rend modal ! : D 

Repeat 
 ev = WaitWindowEvent () 
Until ev = #PB_Event_CloseWindow 
Ce code fait la meme chose.

Bon tanpis (Comme dirais le clavier) :lol: (Blague de musicien) :wink:
Si bilou dis qu'on peux plus, c'est qu'on peux plus :cry:

Merci de ton aide

Publié : ven. 04/mai/2007 20:09
par Stefou
C'est quoi une fenetre "modale" :?

Publié : ven. 04/mai/2007 20:50
par Backup
Stefou a écrit :C'est quoi une fenetre "modale" :?
http://fr.wikipedia.org/wiki/Fen%C3%AAtre_modale