Page 2 sur 2

Publié : lun. 31/oct./2005 16:48
par venom
8) cool chris merci pour ton code sa fini bien ma fenetre et merci aussi pour les fautes d'orthographe :wink: :lol: . en gros c'est vous deux qui avaient fait mon code :lol: . mais merci a vous j'en ai marre des fenetre toutes grise et monotone <- pas sur l'orthographe :lol: . puis cote ortho je vais essayer de faire de mon mieu :wink: :D merci et bonne fin de journee a tout le forum


@++

Publié : mer. 02/nov./2005 12:01
par olivier
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 8O

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

Publié : mer. 02/nov./2005 12:25
par Chris
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.

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 

Publié : mer. 02/nov./2005 12:46
par Chris
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

Publié : mer. 02/nov./2005 12:55
par olivier
Merci chriss cela marche impec ! :D
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).
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.

Mais je tiens note de ta remarque, en ésperant m'en souvenir le jour ou je chercherais un bug.

Merci encore

Publié : mer. 02/nov./2005 12:58
par Chris
olivier a écrit :Merci chriss cela marche impec ! :D
Avec un seul "s", ça suffira :lol:

Publié : mer. 02/nov./2005 13:14
par olivier
Oupss :wink: