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 8)

Publié : mar. 12/sept./2006 20:54
par bombseb
ah non j'ai bu :oops:

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

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