Code : Tout sélectionner
Enumeration
#window_0
#windows_chargement
#Text_30
#ProgressBar_chargement
#ProgressCircle
#Font_Text_0
EndEnumeration
Global bureau_x.l
Global bureau_y.l
Global test_thread.l
Global i.l = 0
Procedure SetProgressCircleState(progressbar.l,segments.l, State.l, color.l, bg.l)
Static progCirc_font.l
Protected IW2.l,TW2.l,TH2.l,x.l,y.l,sp_to_clear.l
Protected img.l = GetGadgetData(progressbar)
Protected beta_in_rad.d
StartDrawing(ImageOutput(img))
IW2.l = ImageWidth(img)/2
State - 1
beta_in_rad.d = (2*#PI*State)/segments - #PI/2
x = IW2 + (IW2 - 4)*Cos(beta_in_rad)
y = IW2 + (IW2 - 4)*Sin(beta_in_rad)
If State < segments/4
x + 2
y + 2
ElseIf State < segments/2
x - 2
y + 2
ElseIf State < 3*segments/4
x - 2
y - 2
Else
x + 2
y - 2
EndIf
FillArea(x,y,bg,color)
StopDrawing()
SetGadgetState(progressbar,ImageID(img))
ProcedureReturn 1
EndProcedure
Procedure ProgressCircle(gadgetNumber.l,x.l,y.l,Size.l,segments.l,bg.l)
Protected radius.l,n.l,x2.l,y2.l,img.l, beta_in_rad.d
img = CreateImage(#PB_Any,Size,Size)
StartDrawing(ImageOutput(img))
Box(0,0,Size,Size,bg)
radius = Size/2
Circle(radius,radius,radius)
Circle(radius,radius,radius-8,bg)
For n = 0 To segments-1
beta_in_rad = (2*#PI*n)/segments
x2.l = radius *(1 + Cos(beta_in_rad))
y2.l = radius *(1 + Sin(beta_in_rad))
LineXY(radius,radius,x2,y2,bg)
Next
StopDrawing()
ImageGadget(gadgetNumber,x,y,Size,Size,ImageID(img))
SetGadgetData(gadgetNumber, img)
EndProcedure
Procedure OpenWindow_windows_chargement()
OpenWindow(#Window_0, 0, 0, 0, 0, "", #PB_Window_BorderLess|#PB_Window_Invisible) ; fenetre fictive
OpenWindow(#windows_chargement, (bureau_x - 420)/2, (bureau_y - 135)/2, 420, 135, "test", 0)
UseGadgetList(WindowID(#windows_chargement))
TextGadget(#Text_30, 75, 5, 345, 55, "")
ProgressBarGadget(#ProgressBar_chargement, 10, 95, 400, 30, 0, 100, #PB_ProgressBar_Smooth)
SetGadgetFont(#Text_30, LoadFont(#Font_Text_0, "Microsoft Sans Serif", 16, 272))
ProgressCircle(#ProgressCircle,5,5,55,8,RGB(210,210,210))
EndProcedure
Procedure fenetre_theader(*type)
r=10
g=150
b=10
Repeat
SetProgressCircleState(#ProgressCircle,8,m_circle,RGB(r, g, b),RGB(210,210,210) )
m_circle+1
If m_circle >= 9
m_circle=1
r+20
g+25
b+10
If g>240
r=10
g=150
b=10
EndIf
EndIf
Delay(50)
ForEver
EndProcedure
Procedure test()
SetGadgetText(#Text_30,Str(i))
EndProcedure
ExamineDesktops()
bureau_x = DesktopWidth(0)
bureau_y = DesktopHeight(0)
OpenWindow_windows_chargement()
;************************************************ fenetre info thread
test_thread = CreateThread(@fenetre_theader(), 10)
Delay(10000) ; PROBLEME, le thread est stoppé
i=1
While i
test()
WindowEvent()
i+1
Delay(1)
Wend
Si je mets OpenWindow_windows_chargement() dans la procedure thread, c'est l'inverse qui se produit. Cela marche 10 secondes, puis se bloque.
Quelqu'un sait quoi faire ?