Salut.
Pour moi W7 et 4.50 finale.
Le processus était bloquant, ce qui fait que parfois la progressBar bloquait n'importe où.
J'ai donc mis ça dans un thread.
Voici un truc qui fonctionne.
Code : Tout sélectionner
EnableExplicit
Global taille.i, progression, dir$, file$
Global evenement.i, quit.i
Procedure compressWindow()
OpenWindow(0, 0, 0, 500, 100, "", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
TextGadget(0, 20, 20, 350, 20, "")
ProgressBarGadget(1, 20, 40, 350, 25, 0, 100)
ButtonGadget(2, 380, 37, 100, 30, "Ouvrir")
EndProcedure
Procedure uncompressCallback(source, dest)
Debug source ; Poid compressé
;progression = source*100/taille
progression = Round((dest / taille) * 100, #PB_Round_Up)
SetGadgetState(1, progression)
Debug progression
Debug dest ; Poid original
ProcedureReturn 1
EndProcedure
compressWindow()
Procedure LancerCompression(*param.i)
file$ = OpenFileRequester("fichier à compresser", "", "*.*", 0)
If file$
taille = FileSize(file$)
dir$ = GetTemporaryDirectory()+Str(ElapsedMilliseconds())
Debug dir$
PackerCallback(@uncompressCallback())
CreatePack(dir$)
AddPackFile(file$)
ClosePack()
Debug "fini"
EndIf
EndProcedure
;{
;- >>>>>>>>>>>> Ma loop
Repeat
evenement = WaitWindowEvent()
;->> Evènements Window
If evenement = #PB_Event_CloseWindow
Select EventWindow()
Case 0 : quit = 1
EndSelect
EndIf
;->> Evènements Boutons (Gadget en général
If evenement = #PB_Event_Gadget
Select EventGadget()
Case 2
CreateThread(@LancerCompression(), 0)
EndSelect
EndIf
Until quit = 1
;}
DeleteFile(dir$)
Le truc un peu bizarre c'est que dans la "Procedure uncompressCallback" :
source ; Poid compressé
dest ; Poid original
J'aurais cru le contraire.
C'est pour ça qu'au début la progressBar ne montait jamais à 100%
Bye.
[EDIT] Ça fonctionne apparemment bien sur des fichiers de 1.5 et 4.05 Mo mais je viens de tester sur un fichier texte de 126ko et ça ne fonctionne pas
[EDIT2] En plus avec ce code ci-dessous, la compression est presque instantannée pour un fichier de 3.5Mo, alors qu'avec le code ci-dessus ça met une plombe.
Je suis étonné parce qu'un fichier texte de 3.5Mo tombe à 1,31 Ko et revient à son bon poids une fois décompressé.
Code : Tout sélectionner
Delay(4000)
CreatePack("_Packe.pakos")
AddPackFile("_AAAAA.txt", 9)
ClosePack()
Delay(1000)
If OpenPack("_Packe.pakos")
*nextPackFile = NextPackFile()
packFileSize = PackFileSize()
If *nextPackFile
If CreateFile(0, "_Decompresse.txt"); ;write to disk
WriteData(0, *nextPackFile, packFileSize)
CloseFile(0)
EndIf
EndIf
EndIf
ClosePack()