Page 2 sur 2

Re: Problème de timer ( enfin de KillTimer_ )

Publié : lun. 26/oct./2009 23:50
par Ar-S
Oui on en est venu à la même conclusion avec Dobro, les thread sont mieux appropriés ici.
Donc ta modif fonctionne relativement bien, Merci ! :D
Par contre, je ne sais pas pourquoi mais casiment tout le temps, si je lance le programme et que je glisse/depose un dossier, rien ne se passe et ça affiche que l'opération est terminé, ensuite, si je reglisse un dossier ça fonctionne (et toutes les autres fois après d'ailleurs). Mais si je quitte le programme et que je recommence, pareil. très bizarre.

Revoilà le bouzin en l'état (sauf son)

Code : Tout sélectionner

;Resizier par Ar-S -2009 // PB 4.30
InitSound   ()  ; initialisation du son
#Son =1
UseJPEGImageEncoder()
UseJPEGImageDecoder()

Enumeration
  #AFF : #Image : #t1
EndEnumeration
;}
Global TailleHauteur.l=1024
Global L.l,H.l,Limg.l,Himg.l,compte
Global DernierDossier$,NouveauRep$,car$,pos,fin
Declare Clignote(d.i)

Procedure Clignote(d.i)
  Static mode=0
  Repeat
    Select mode
      Case 0
        SetGadgetText(#AFF,"* Traitement en cours image > "+Str(compte))
      Case 1
        SetGadgetText(#AFF,"* Traitement en cours image >>> "+Str(compte))
    EndSelect
    mode = 1-mode
    Delay(d)
  ForEver
EndProcedure
   
OpenWindow(0, 583, 629, 319, 23, "LDVM redim 1024 haut relatif", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
StickyWindow(0,1)
CatchSound ( #Son , ?chimes_wav_Start , ?chimes_wav_End)
StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez les images ici",#PB_String_ReadOnly)
EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
   
    ;{- Event loop
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #AFF
      EndSelect
      
    Case #PB_Event_WindowDrop

      thread=CreateThread(@Clignote(),200)

      Debug EventDropFiles()
      
      compte=0
      Repertoire$=EventDropFiles()
      RepSav$=Repertoire$+"\"
      
      pos=1
      NumCar=Len(Repertoire$)
      Repeat
        car$=Right(Repertoire$,pos)
        If Left(car$,1)<>"\"
          pos=pos+1
          car$=Right(Repertoire$,pos)
        Else
          Debug "Car : "+car$
          Debug "Pos : "+Str(pos)
        EndIf 
      Until Left(car$,1)="\"
      
      DernierDossier$=Right(car$,pos-1)
      NouveauRep$=RepSav$+DernierDossier$+"\"
      nouveauRep=CreateDirectory(NouveauRep$)
      If nouveauRep
        Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        
        If ExamineDirectory(NumDir, Repertoire$, "*.jpg") 
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              compte=compte+1
              ;txtListe$="AddGadgetItem(#list, 0, "+Chr(34)+DernierDossier$+Chr(34)+")"
              SetClipboardText(DernierDossier$)
              NomRepertoire$ = EventDropFiles()
              fichier$=DirectoryEntryName(0)
              charge=LoadImage(#Image, RepSav$+fichier$)
              If charge
                Limg=ImageWidth(#Image):Himg=ImageHeight(#Image)
                H=TailleHauteur : L=Limg*TailleHauteur/Himg
                
                NomNew$=Str(compte)+".jpg"
                ResizeImage(#Image,L,H,#PB_Image_Smooth)
                SaveImage(#Image,NouveauRep$+NomNew$,#PB_ImagePlugin_JPEG,75)
                WindowEvent()
                ;Delay(10)
              Else
                SetGadgetText(#AFF,"Erreur de chargement de L'image")
              EndIf
            Else
              Debug "aucune image jpg"
            EndIf
          Wend
          FinishDirectory(0)

        EndIf
      Else
        Debug "creation de dossier impossible"
      EndIf
      
      PlaySound ( #Son ,1)
      Delay (600)
      StopSound(#Son)
      ;KillThread(thread)
      If IsThread(thread)
        KillThread(thread)
      EndIf
      SetGadgetText(#AFF,"Terminé ! "+Str(compte)+" images traitées")
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          If IsThread(thread)
            KillThread(thread)
          EndIf
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
ForEver

Re: Problème de timer ( enfin de KillTimer_ )

Publié : mar. 27/oct./2009 8:57
par zaphod
j'ai l'impression qu'il y a interference entre le eventdropfiles() et le windowevent()

Peut-être utiliser une variable pour stocker le eventdropfiles() ?