@++
Affichage Fenetre
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
-
olivier
- Messages : 305
- Inscription : mer. 05/janv./2005 12:58
- Localisation : http://www.tib-net.com/meca/index.htm
Excellent c'est tout a fait ce que je cherchais.
J'ai juste un soucis, j'ai inserer dans le code :
- une thread qui va me permettre de copier des fichiers
- et une barre de progression perso
Tout marche bien, la fenetre se déplace bien....
MAIS quand je recouvre ma fenetre avec une autre fentre et que je la rend ensuite visible,(utilisation d'un autre programme pendant le fin de celui là) l'image de fond se décalle
Je n'arrive pas a trouver pourquoi, alors merci d'avance du coup de main.
J'ai juste un soucis, j'ai inserer dans le code :
- une thread qui va me permettre de copier des fichiers
- et une barre de progression perso
Tout marche bien, la fenetre se déplace bien....
MAIS quand je recouvre ma fenetre avec une autre fentre et que je la rend ensuite visible,(utilisation d'un autre programme pendant le fin de celui là) l'image de fond se décalle
Je n'arrive pas a trouver pourquoi, alors merci d'avance du coup de main.
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration
#Frame3D_0
#IPAddress_0
#Button_0
#ProgressBar_0
#Button_1
#TrackBar_0
#Frame3D_2
#Frame3D_3
#Frame3D_4
#Text_1
#Text_2
#Text_3
#Image
#im_barre_progress
EndEnumeration
LoadImage(#Image, "c:/test.bmp")
Procedure CallBack(Hnd,Msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
If Msg = #WM_PAINT
ps.PAINTSTRUCT
hdc=BeginPaint_(Hnd, ps)
hdc_source=CreateCompatibleDC_(hdc)
SelectObject_(hdc_source,UseImage(#Image))
BitBlt_(hdc, 0, 0, 600, 400,hdc_source, 0, 0, #SRCCOPY)
EndPaint_(Hnd,ps)
DeleteDC_(hdc_source)
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure Copy_fichier()
If CreateImage(#im_barre_progress, 346, 13)
If StartDrawing(ImageOutput())
StopDrawing()
EndIf
Repeat
i=i+1
Delay(100)
If StartDrawing(ImageOutput())
Box(0, 0, 346, 13,RGB(239,170,92))
Box(0, 0, i*3.46, 13,RGB(40,185,56))
FrontColor(0,0,0)
DrawingMode(1)
Locate(0,-1)
DrawText(" fichier.txt "+Str(i))
StopDrawing()
EndIf
SetGadgetState(#im_barre_progress,ImageID())
;MessageRequester("","",0)
Until i=100
EndIf
thread=0
EndProcedure
If OpenWindow(#Window_0, 303, 103, 485, 250, #PB_Window_SizeGadget|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "virtual cb")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_1, 280, 170, 170, 30, "lancer", #PB_Button_Toggle)
ImageGadget(#im_barre_progress, 26,98, 346,10, 0)
SetWindowCallback(@CallBack())
EndIf
EndIf
InvalidateRect_(WindowID(0),0,1)
Repeat
event = WaitWindowEvent()
If event = #PB_EventGadget
Select EventGadgetID()
Case #Button_1
ThreadID=CreateThread(@Copy_fichier(),ess)
EndSelect
EndIf
Until event = #PB_EventCloseWindow
Vive le temps libre !
En sélectionnant quelle image tu veux rafraichir dans la callback et dans le thread, ça à l'air de marcher.
Par contre, j'ai pas vérifié le thread.
Par contre, j'ai pas vérifié le thread.
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration
#Frame3D_0
#IPAddress_0
#Button_0
#ProgressBar_0
#Button_1
#TrackBar_0
#Frame3D_2
#Frame3D_3
#Frame3D_4
#Text_1
#Text_2
#Text_3
#Image
#im_barre_progress
EndEnumeration
UseJPEGImageDecoder()
LoadImage(#Image, "D:\PureBasic\Compilers\collines.jpg")
Procedure CallBack(Hnd,msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
If msg = #WM_PAINT
UseImage(#Image);<------- ici
ps.PAINTSTRUCT
hdc=BeginPaint_(Hnd, ps)
hdc_source=CreateCompatibleDC_(hdc)
SelectObject_(hdc_source,UseImage(#Image))
BitBlt_(hdc, 0, 0, 600, 400,hdc_source, 0, 0, #SRCCOPY)
EndPaint_(Hnd,ps)
DeleteDC_(hdc_source)
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure Copy_fichier()
If CreateImage(#im_barre_progress, 346, 13)
; If StartDrawing(ImageOutput())
;
; StopDrawing()
; EndIf
Repeat
i=i+1
Delay(100)
UseImage(#im_barre_progress) ;<----- ici
If StartDrawing(ImageOutput())
Box(0, 0, 346, 13,RGB(239,170,92))
Box(0, 0, i*3.46, 13,RGB(40,185,56))
FrontColor(0,0,0)
DrawingMode(1)
Locate(0,-1)
DrawText(" fichier.txt "+Str(i))
StopDrawing()
EndIf
SetGadgetState(#im_barre_progress,ImageID())
;MessageRequester("","",0)
Until i=100
EndIf
thread=0
EndProcedure
If OpenWindow(#Window_0, 303, 103, 485, 250, #PB_Window_SizeGadget|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "virtual cb")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_1, 280, 170, 170, 30, "lancer", #PB_Button_Toggle)
ImageGadget(#im_barre_progress, 26,98, 346,10, 0)
SetWindowCallback(@CallBack())
EndIf
EndIf
InvalidateRect_(WindowID(0),0,1)
Repeat
event = WaitWindowEvent()
If event = #PB_EventGadget
Select EventGadgetID()
Case #Button_1
ThreadID=CreateThread(@Copy_fichier(),ess)
EndSelect
EndIf
Until event = #PB_EventCloseWindow
Un truc que je n'avais pas vu:
Tu as un ImageGadget() nommé #im_barre_progress, et tu crée une image en lui donnant le même nom, et donc, le même index que ton gadget).
Dans ton cas, ça marche sans conflit, mais ça pourrait tout aussi bien planter!
Ce que j'en pense, mais je peux me tromper:
A éviter, dans la mesure du possible. C'est le genre de truc qui, en cas de bug, te fera passer un temps fou le nez dans le code à te demander pourquoi ça ne fonctionne pas
Tu as un ImageGadget() nommé #im_barre_progress, et tu crée une image en lui donnant le même nom, et donc, le même index que ton gadget).
Dans ton cas, ça marche sans conflit, mais ça pourrait tout aussi bien planter!
Ce que j'en pense, mais je peux me tromper:
A éviter, dans la mesure du possible. C'est le genre de truc qui, en cas de bug, te fera passer un temps fou le nez dans le code à te demander pourquoi ça ne fonctionne pas
-
olivier
- Messages : 305
- Inscription : mer. 05/janv./2005 12:58
- Localisation : http://www.tib-net.com/meca/index.htm
Merci chriss cela marche impec !
Mais je tiens note de ta remarque, en ésperant m'en souvenir le jour ou je chercherais un bug.
Merci encore
Oui j'ai pris l'habitute de faire cela, comme ça, je sais quelle image mettre dans quel gadget, et cela à l'air de marcher.Tu as un ImageGadget() nommé #im_barre_progress, et tu crée une image en lui donnant le même nom, et donc, le même index que ton gadget).
Mais je tiens note de ta remarque, en ésperant m'en souvenir le jour ou je chercherais un bug.
Merci encore
Vive le temps libre !
-
olivier
- Messages : 305
- Inscription : mer. 05/janv./2005 12:58
- Localisation : http://www.tib-net.com/meca/index.htm