Page 1 sur 1
Fenêtre modale
Publié : mar. 12/sept./2006 19:30
par bombseb
Bonjour,
J'aimerais ouvrir une fenêtre modale à partir d'une autre fenêtre
(pour moi une fenêtre modale est une fenêtre qui oblige l'utilisateur à la fermer pour revenir sur la fenêtre principale)
j'ai trouvé une astuce sur le forum qui consiste à utiliser un EnableWindow_ mais apparement cette fonction n'existe plus...
Publié : mar. 12/sept./2006 19:51
par bombseb
ah oui j'oubliais, je suis en v3.94

Publié : mar. 12/sept./2006 19:53
par Flype
facile avec PB4.0 :
en gros :
DisableWindow(#Fenetre_Mere, #True)
OpenWindow(#Fenetre_Fille, [...Arguments...], WindowID(#Fenetre_Mere))
[...Gestion Evenement...]
CloseWindow(#Fenetre_Fille)
DisableWindow(#Fenetre_Mere, #False)
Publié : mar. 12/sept./2006 19:55
par Flype
bombseb a écrit :ah oui j'oubliais, je suis en v3.94

ah zut,
Mais bon c'est tout pareil sauf que tu utilises EnableWindow_() à la place de DisableWindow() c'est tout.
Tu dis que la fonction n'existe plus, c'est bien étonnant parceque je programme avec les 2 versions et EnableWindow_() je m'en sers tout le temps en 3.94
Publié : mar. 12/sept./2006 20:13
par bombseb
oui je ne comprends pas cette fonction je ne l'ai pas....
bon sinon j'ai réussi en bidouillant mais bof :
Dans l'evenement #PB_Event_ActivateWindow de ma fenêtre appellante je met ca lorsqu'un booleen qui indique si ma fenêtre modale est ouverte :
UseWindow (#MaFenetreModale)
ActivateWindow ()
mais bon c'est du bidouillage....
Publié : mar. 12/sept./2006 20:16
par Flype
essaye çà pour 3.94 :
Code : Tout sélectionner
Procedure DisableWindow394(window.l, state.l)
Protected id.l, ret.l
id = OpenLibrary(#PB_Any, "user32.dll")
If id
ret = CallFunction(id, "EnableWindow", WindowID(window), #True-state)
CloseLibrary(id)
EndIf
ProcedureReturn ret
EndProcedure
If OpenWindow(0, 100, 100, 640, 480, #PB_Window_SystemMenu, "mère")
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 120, 25, "fille")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Debug DisableWindow394(0, #True)
If OpenWindow(1, 150, 150, 320, 240, #PB_Window_SystemMenu, "fille", WindowID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
CloseWindow(1)
EndIf
Debug DisableWindow394(0, #False)
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
mais es-tu bien sûr que EnableWindow_() ne fonctionne pas ???
essayes çà pour voir quand même :
Code : Tout sélectionner
If OpenWindow(0, 100, 100, 640, 480, #PB_Window_SystemMenu, "mère")
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 120, 25, "fille")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Debug EnableWindow_(WindowID(0), #False)
If OpenWindow(1, 150, 150, 320, 240, #PB_Window_SystemMenu, "fille", WindowID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
CloseWindow(1)
EndIf
Debug EnableWindow_(WindowID(0), #True)
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Publié : mar. 12/sept./2006 20:49
par bombseb
oh !
ton code marche !!
alors c'est bizarre ca veux dire que la fonction EnableWindow_ existe mais n'est pas dans l'aide
bon bah merci, je vais utiliser ca alors

Publié : mar. 12/sept./2006 20:54
par bombseb
ah non j'ai bu
non en fait ca compile bien, mais la fonction EnableWindow_ n'a aucun effet...
EDIT : bon décidement : non ton prog marche tres bien.... j'ai du merder dans mon prog
Publié : mar. 12/sept./2006 21:19
par Flype
me semblait bien
par contre, c'est tout à fait normal que tu EnableWindow_() ne soit pas dans l'aide puisque comme toute fonction terminant par '_' il s'agit d'une fonction système (API Win32).
Donc il faut pour regarder l'aide avoir win32.chm ou voir ici tout simplement :
http://msdn.microsoft.com/library/defau ... window.asp
[EDIT]
au fait, enlève les debug quand tu compiles.
parceque sinon ces lignes ne seront pas prisent en compte par le compilateur, et donc une fois compilé bah oui ca marche plus.

Publié : mar. 12/sept./2006 21:39
par bombseb
okok merci pour tout tes tuyau... d'ailleur je ne savait pas que les fonctions terminant par un _ était en fait des api windows.....
bon bah voilà ce que j'ai fait :
Code : Tout sélectionner
IncludeFile "winlib.pb"
Procedure Options (ParentWindow)
EnableWindow_(WindowID (ParentWindow), #False)
Repeat
EventID = WaitWindowEvent ()
; ****************************
; **** Options ****
; ****************************
If EventID = #PB_EventGadget
Select EventGadgetID ()
Case #Button_Annuler ; ***** Quitter les options..*****
EventID = #PB_Event_CloseWindow
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
CloseWindow (#Window_Options)
EnableWindow_(WindowID (ParentWindow), #True)
UseWindow (ParentWindow)
ActivateWindow ()
EndProcedure
Open_Window_Main ()
Repeat
EventID = WaitWindowEvent ()
; ****************************
; **** Fenêtre principale ****
; ****************************
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID ()
Case #Button_Options ; ***** Options *****
Open_Window_Options ()
Options (#Window_Main)
Case #Button_Quitter ; ***** Quit..*****
EventID = #PB_Event_CloseWindow
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow