Au sujet des fenêtres modales
Au sujet des fenêtres modales
J'arrives pas a rendre une fenêtre modale comme ceci :
=>Fenetre princiapale=>Clique sur un item du menu=>Ouvre une fenêtre mais sans fermer la fenetre de base
C'est possible de faire ca ??
=>Fenetre princiapale=>Clique sur un item du menu=>Ouvre une fenêtre mais sans fermer la fenetre de base
C'est possible de faire ca ??
Un exemple parmi d'autres :
Une fois compilé clic sur la surface de la fenêtre principale pour voir ce qu'il se passe. Ensuite fais un essai en changeant les deux fonctions HideWindow() et DisableWindow() (décommente la première et commente la seconde)
Une fois compilé clic sur la surface de la fenêtre principale pour voir ce qu'il se passe. Ensuite fais un essai en changeant les deux fonctions HideWindow() et DisableWindow() (décommente la première et commente la seconde)
Code : Tout sélectionner
Enumeration
#WIN
#OpenSec
#Quit
#Win_Sec
#CloseSec
#StatusSec
EndEnumeration
Procedure Win_Sec()
If OpenWindow(#Win_Sec,0,0, 400, 300,"Fenêtre secondaire ", #PB_Window_SystemMenu |#PB_Window_ScreenCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win_Sec))=0
End
EndIf
; HideWindow(#WIN,1) ; cache la fenêtre principale
DisableWindow(#WIN,1) ; désactive la fenêtre principale
ButtonGadget(#CloseSec,150,125,100,25,"Fermer")
GadgetToolTip(#CloseSec,"Fermer la fenêtre secondaire")
If CreateStatusBar(#StatusSec, WindowID(#Win_Sec))
AddStatusBarField(400)
StatusBarText(#StatusSec,0,"Cette fenêtre supporte toutes les fonctions de PB...",#PB_StatusBar_Raised)
EndIf
Repeat
EventSec = WaitWindowEvent()
If EventSec = #PB_Event_Gadget
Select EventGadget()
Case #CloseSec : EventSec = #PB_Event_CloseWindow
EndSelect
EndIf
Until EventSec = #PB_Event_CloseWindow
CloseWindow(#Win_Sec)
; HideWindow(#WIN,0)
DisableWindow(#WIN,0)
EndProcedure
If OpenWindow(#WIN,0,0,790,550,"Fenêtre principale" ,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#WIN))=0
End
EndIf
SetWindowColor(#WIN, RGB(255, 255, 255))
ButtonGadget(#OpenSec,10,10,100,25,"Ouvrir")
GadgetToolTip(#OpenSec,"Ouvrir la fenêtre secondaire")
ButtonGadget(#Quit,680,510,100,25,"Quitter")
GadgetToolTip(#Quit,"Fermer et quitter")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #OpenSec : Win_Sec()
Case #Quit : Event = #PB_Event_CloseWindow
EndSelect
EndIf
Until Event= #PB_Event_CloseWindow
End
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.
sinon j'ai maintenant une autre question(ben quoi,newbie et fier de l'être)
c'est possible de faire ca :
on a une barre de progression standard,et 3 secondes après avoir ouvert le programme elle est a 100%,et une demie seconde après une nouvelle fenetre s'ouvre ?
Je pense gérer ca commme ceci :
Barre a 0%
3000 milisecondes plus tard
Barre entièrement remplie
500 milisecondes plus tard
Ouverture d'une nouvelle fenêtre.
Merci
c'est possible de faire ca :
on a une barre de progression standard,et 3 secondes après avoir ouvert le programme elle est a 100%,et une demie seconde après une nouvelle fenetre s'ouvre ?
Je pense gérer ca commme ceci :
Barre a 0%
3000 milisecondes plus tard
Barre entièrement remplie
500 milisecondes plus tard
Ouverture d'une nouvelle fenêtre.
Merci

Une solution. Il y en a d'autres avec les timers.
Amuses toi bien
@+
Code : Tout sélectionner
Enumeration
#WIN
#OpenSec
#Progress
#Quit
#Win_Sec
#CloseSec
#StatusSec
EndEnumeration
Procedure Win_Sec()
If OpenWindow(#Win_Sec,0,0, 400, 300,"Fenêtre secondaire ", #PB_Window_SystemMenu |#PB_Window_ScreenCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win_Sec))=0
End
EndIf
; HideWindow(#WIN,1) ; cache la fenêtre principale
DisableWindow(#WIN,1) ; désactive la fenêtre principale
ButtonGadget(#CloseSec,150,125,100,25,"Fermer")
GadgetToolTip(#CloseSec,"Fermer la fenêtre secondaire")
If CreateStatusBar(#StatusSec, WindowID(#Win_Sec))
AddStatusBarField(400)
StatusBarText(#StatusSec,0,"Cette fenêtre supporte toutes les fonctions de PB...",#PB_StatusBar_Raised)
EndIf
Repeat
EventSec = WaitWindowEvent()
If EventSec = #PB_Event_Gadget
Select EventGadget()
Case #CloseSec : EventSec = #PB_Event_CloseWindow
EndSelect
EndIf
Until EventSec = #PB_Event_CloseWindow
CloseWindow(#Win_Sec)
; HideWindow(#WIN,0)
DisableWindow(#WIN,0)
EndProcedure
Procedure LoadProgress()
ValT = GetGadgetState(#Progress)
SetGadgetState(#Progress, ValT+25)
EndProcedure
Procedure LoadDisplay()
LoadProgress()
Delay(1000)
LoadProgress()
Delay(1000)
LoadProgress()
Delay(1000)
LoadProgress()
Delay(1500)
Win_Sec()
SetGadgetState(#Progress, 0)
EndProcedure
Procedure OpenWinMain()
If OpenWindow(#WIN,0,0,790,550,"Fenêtre principale" ,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#WIN))=0
End
EndIf
SetWindowColor(#WIN, RGB(255, 255, 255))
ButtonGadget(#OpenSec,10,10,100,25,"Ouvrir")
GadgetToolTip(#OpenSec,"Ouvrir la fenêtre secondaire")
ProgressBarGadget(#Progress,10,250,770,25,0,100)
ButtonGadget(#Quit,680,510,100,25,"Quitter")
GadgetToolTip(#Quit,"Fermer et quitter")
EndProcedure
OpenWinMain()
CreateThread(@LoadDisplay(),0) ; le thread permet de ne pas figer la fenêtre
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #OpenSec : CreateThread(@LoadDisplay(),0)
Case #Quit : Event = #PB_Event_CloseWindow
EndSelect
EndIf
Until Event= #PB_Event_CloseWindow
End
@+
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.
dernier point pour que ce soit plus sympa
On utilise maintenant une boucle For Next avec des valeurs différentes pour un affichage différent et plus fluide.
remplace ces deux procédures dans le code et teste. Après choisis tes valeurs
On utilise maintenant une boucle For Next avec des valeurs différentes pour un affichage différent et plus fluide.
remplace ces deux procédures dans le code et teste. Après choisis tes valeurs
Code : Tout sélectionner
Procedure LoadProgress()
ValT = GetGadgetState(#Progress)
SetGadgetState(#Progress, ValT+1) ; valeur changée pour le mode long ci-dessous
EndProcedure
Procedure LoadDisplay()
For t = 1 To 100 ;tu peux modifier le nombre avec la valeur souhaitée ...
LoadProgress()
Delay(10) ; ... avec moins de temps comme Delay(10) ce sera plus smooth
Next
; Delay(500) ; pas nécessaire mais bon...
Win_Sec()
SetGadgetState(#Progress, 0)
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.
Remise du code complet remanié auquel j'ai rajouté l'affichage du pourcentage de chargement. Simple mais pratique.
@+ 
Code : Tout sélectionner
;-constantes
Enumeration
#WIN
#OpenSec
#Progress
#TextProgress
#Quit
#Win_Sec
#CloseSec
#StatusSec
EndEnumeration
Procedure Win_Sec()
If OpenWindow(#Win_Sec,0,0, 400, 300,"Fenêtre secondaire ", #PB_Window_SystemMenu |#PB_Window_ScreenCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win_Sec))=0
End
EndIf
; HideWindow(#WIN,1) ; cache la fenêtre principale
DisableWindow(#WIN,1) ; désactive la fenêtre principale
ButtonGadget(#CloseSec,150,125,100,25,"Fermer")
GadgetToolTip(#CloseSec,"Fermer la fenêtre secondaire")
If CreateStatusBar(#StatusSec, WindowID(#Win_Sec))
AddStatusBarField(400)
StatusBarText(#StatusSec,0,"Cette fenêtre supporte toutes les fonctions de PB...",#PB_StatusBar_Raised)
EndIf
Repeat
EventSec = WaitWindowEvent()
If EventSec = #PB_Event_Gadget
Select EventGadget()
Case #CloseSec : EventSec = #PB_Event_CloseWindow
EndSelect
EndIf
Until EventSec = #PB_Event_CloseWindow
CloseWindow(#Win_Sec)
; HideWindow(#WIN,0)
DisableWindow(#WIN,0)
EndProcedure
Procedure LoadProgress()
ValT = GetGadgetState(#Progress)
SetGadgetState(#Progress, ValT+1) ; valeur changée pour le mode long ci-dessous
SetGadgetText(#TextProgress, "Chargé à : "+Str(ValT)+" %")
EndProcedure
Procedure LoadDisplay()
For t = 0 To 100 ;tu peux modifier le nombre avec la valeur souhaitée ...
LoadProgress()
Delay(10) ; ... avec moins de temps comme Delay(10) ce sera plus smooth
Next
Win_Sec()
SetGadgetState(#Progress, 0) ; remise à zéro
SetGadgetText(#TextProgress, "") ; remise à zéro
EndProcedure
Procedure OpenWinMain()
If OpenWindow(#WIN,0,0,790,550,"Fenêtre principale" ,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#WIN))=0
End
EndIf
ButtonGadget(#OpenSec,10,10,100,25,"Ouvrir")
GadgetToolTip(#OpenSec,"Ouvrir la fenêtre secondaire")
ProgressBarGadget(#Progress,10,250,770,25,0,100)
TextGadget(#TextProgress, 330,280,110,20,"") ; pour afficher le pourcentage
ButtonGadget(#Quit,680,510,100,25,"Quitter")
GadgetToolTip(#Quit,"Fermer et quitter")
EndProcedure
OpenWinMain()
CreateThread(@LoadDisplay(),0) ; le thread permet de ne pas figer la fenêtre
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #OpenSec : CreateThread(@LoadDisplay(),0)
Case #Quit : Event = #PB_Event_CloseWindow
EndSelect
EndIf
Until Event= #PB_Event_CloseWindow
End

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.
Pas forcément.Doctor-B a écrit :pout les timers il faut la version complete ^^
merci pour ta soluce
Tu peux créer ton timer avec la fonction "ElapsedMilliseconds()"
Code : Tout sélectionner
Delay(1) ; Pour permettre au debugger de se lancer
S = 0 ; Pour l'affichage du nombre de secondes
TimeStart = ElapsedMilliseconds()
While S < 11
If ElapsedMilliseconds() - TimeStart = 1000
If S = 1 : T$ = " seconde" : Else : T$ = " secondes" : EndIf
Debug "Temps écoulé = " +Str(S) + T$ : S+1
TimeStart = ElapsedMilliseconds()
EndIf
Wend