Au sujet de l'API CoyFileEx
Au sujet de l'API CoyFileEx
Bonjour à tous,
Je cherche à exploiter l'API CoyFileEx.
Cette API comporte plusieurs paramètres.
Mon but est de savoir comment faire pour connaître la progression d'une copie d'un fichier et de pouvoir arrêter la copie d'un fichier en cours.
Pour cela j'ai fait une structure pour les paramètres CopyProgress et j'ai envoyé l'adresse du premier élément de la structure au paramètre pour la CopyProgress.
J'ai également mis le flag à #True pour arrêter la copie pour le paramètre Cancel de l'API.
Sans résultat.
Je me demande si la fonction fonctionne sous PB.
Je ne peux hélas vous donner d'exemple mais merci de m'indiquer les clés pour pouvoir réussir ce que je cherche à faire.
Je cherche à exploiter l'API CoyFileEx.
Cette API comporte plusieurs paramètres.
Mon but est de savoir comment faire pour connaître la progression d'une copie d'un fichier et de pouvoir arrêter la copie d'un fichier en cours.
Pour cela j'ai fait une structure pour les paramètres CopyProgress et j'ai envoyé l'adresse du premier élément de la structure au paramètre pour la CopyProgress.
J'ai également mis le flag à #True pour arrêter la copie pour le paramètre Cancel de l'API.
Sans résultat.
Je me demande si la fonction fonctionne sous PB.
Je ne peux hélas vous donner d'exemple mais merci de m'indiquer les clés pour pouvoir réussir ce que je cherche à faire.
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: Au sujet de l'API CoyFileEx
Salut.
Regardes les procédures "BackgroundTransfert" de la Droopy lib
Bye.
Regardes les procédures "BackgroundTransfert" de la Droopy lib
Bye.
-
- Messages : 510
- Inscription : dim. 25/mars/2007 13:44
- Localisation : Toulouse, France
- Contact :
Re: Au sujet de l'API CoyFileEx
Voilà un petit code vite fais :
Dis moi si tu ne comprends pas quelque chose.
Code : Tout sélectionner
Procedure CopyProgressRoutine(TotalFileSize.q, TotalBytesTransferred.q, StreamSize.q, StreamBytesTransferred.q, dwStreamNumber.l, dwCallbackReason.l, hSourceFile.l, hDestinationFile.l, lpData.i)
SetGadgetAttribute(7, #PB_ProgressBar_Maximum, TotalFileSize) ;on fixe le maximum de la ProgressBar
SetGadgetState(7, TotalBytesTransferred) ;on actualise la ProgressBar
EndProcedure
OpenWindow(0, 0, 0, 500, 200, "Test CopyFileEx", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(0, 10, 10, 150, 20, "Fichier source;")
StringGadget(1, 10, 30, 150, 20, "")
ButtonGadget(2, 170, 25, 100, 30, "Parcourir ...")
TextGadget(3, 10, 60, 150, 20, "Fichier cible:")
StringGadget(4, 10, 80, 150, 20, "")
ButtonGadget(5, 170, 75, 100, 30, "Parcourir ...")
TextGadget(6, 20, 110, 150, 20, "Avancement:")
ProgressBarGadget(7, 20, 130, 400, 30, 0, 0)
ButtonGadget(8, 20, 165, 100, 30, "GO")
quit = 0
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2 ;parcourir le fichier source
source.s = OpenFileRequester("Ouvrir", "", "*.*", -1)
If source
SetGadgetText(1, source)
EndIf
Case 5 ;parcourir le fichier cible
cible.s = SaveFileRequester("Enregistrer", "", "*.*", -1)
If cible
SetGadgetText(4, cible)
EndIf
Case 8 ;GO
source.s = GetGadgetText(1)
cible.s = GetGadgetText(4)
If source And cible
CopyFileEx_(source, cible, @CopyProgressRoutine(), 0, 0, 1) ;on lance la copie
EndIf
EndSelect
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
End
Re: Au sujet de l'API CopyFileEx
Merci GeoTrouvPatou.
Mais je ne sais pas ce que c'est que le "BackgroundTransfert" de la Droopy lib.
Merci de m'expliquer.
Mais je ne sais pas ce que c'est que le "BackgroundTransfert" de la Droopy lib.
Merci de m'expliquer.
Re: Au sujet de l'API CopyFileEx
Merci lepiaf31 pour ton programme.
Je ne l'ai pas encore testé mais déjà je vois certaines choses.
Dans la fonction CopyFileEx il y a un paramètre qui est Cancel, c'est-à-dire la possibilité d'arrêter la copie en cours de route et pour cela le paramètre doit avoir le flag #True.
Je ne la vois pas et je ne vois pas le flag mis. Tu mets 0 à la place.
Mais tu m'as donné les clés pour avancer également dans ce domaine. J'avais pas pensé à faire ce que fait ton programme. Pourtant c'est très simple.
Un grand merci à toi pour ton aide et ton programme.
Je ne l'ai pas encore testé mais déjà je vois certaines choses.
Dans la fonction CopyFileEx il y a un paramètre qui est Cancel, c'est-à-dire la possibilité d'arrêter la copie en cours de route et pour cela le paramètre doit avoir le flag #True.
Je ne la vois pas et je ne vois pas le flag mis. Tu mets 0 à la place.
Mais tu m'as donné les clés pour avancer également dans ce domaine. J'avais pas pensé à faire ce que fait ton programme. Pourtant c'est très simple.
Un grand merci à toi pour ton aide et ton programme.
-
- Messages : 510
- Inscription : dim. 25/mars/2007 13:44
- Localisation : Toulouse, France
- Contact :
Re: Au sujet de l'API CoyFileEx
Si tu veux pouvoir annuler la copie, il faut threadé tout ça. Voilà ce que j'ai fait :
Code : Tout sélectionner
Procedure CopyProgressRoutine(TotalFileSize.q, TotalBytesTransferred.q, StreamSize.q, StreamBytesTransferred.q, dwStreamNumber.l, dwCallbackReason.l, hSourceFile.l, hDestinationFile.l, lpData.i)
SetGadgetAttribute(7, #PB_ProgressBar_Maximum, TotalFileSize) ;on fixe le maximum de la ProgressBar
SetGadgetState(7, TotalBytesTransferred) ;on actualise la ProgressBar
If PeekI(lpData) = #True ;on annule
ProcedureReturn 1 ;#PROGRESS_CANCEL
Else
ProcedureReturn 0 ;#PROGRESS_CONTINUE
EndIf
EndProcedure
Procedure thread_copy(*annuler)
source.s = GetGadgetText(1)
cible.s = GetGadgetText(4)
If source And cible
If CopyFileEx_(source, cible, @CopyProgressRoutine(), *annuler, 0, 1) ;on lance la copie
MessageRequester("Terminé", "Copie terminée")
Else
MessageRequester("Erreur", "Copie annulée !")
EndIf
SetGadgetText(8, "GO")
SetGadgetState(7, 0)
EndIf
copieEnCours = 0
EndProcedure
OpenWindow(0, 0, 0, 500, 200, "Test CopyFileEx", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(0, 10, 10, 150, 20, "Fichier source;")
StringGadget(1, 10, 30, 150, 20, "")
ButtonGadget(2, 170, 25, 100, 30, "Parcourir ...")
TextGadget(3, 10, 60, 150, 20, "Fichier cible:")
StringGadget(4, 10, 80, 150, 20, "")
ButtonGadget(5, 170, 75, 100, 30, "Parcourir ...")
TextGadget(6, 20, 110, 150, 20, "Avancement:")
ProgressBarGadget(7, 20, 130, 400, 30, 0, 0)
ButtonGadget(8, 20, 165, 100, 30, "GO")
Global copieEnCours = 0 ;indique si une copie est en cours
annuler.l = #False ;quand cette variable pas à True, on annule le copie
quit = 0
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2 ;parcourir le fichier source
source.s = OpenFileRequester("Ouvrir", "", "*.*", -1)
If source
SetGadgetText(1, source)
EndIf
Case 5 ;parcourir le fichier cible
cible.s = SaveFileRequester("Enregistrer", "", "*.*", -1)
If cible
SetGadgetText(4, cible)
EndIf
Case 8 ;GO / Annuler
If copieEnCours = 0
annuler = #False
copieEnCours = 1
SetGadgetText(8, "Annuler")
CreateThread(@thread_copy(), @annuler)
Else
annuler = #True
Delay(500)
copieEnCours = 0
EndIf
EndSelect
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
End
Re: Au sujet de l'API CopyFileEx
Merci lepiaf31 pour la suite.
Je peux dire que, grâce à toi, j'ai réussi à faire le Progress Bar. Cela fonctionne parfaitement bien.
J'ai bien compris que la CopyFileEx rafraîchissait constamment les paramètres que l'on peut retrouver dans la procédure.
Je vais donc étudier ce que tu m'as donné au sujet de l'annulation de la copie.
Merci encore à toi.
Je peux dire que, grâce à toi, j'ai réussi à faire le Progress Bar. Cela fonctionne parfaitement bien.
J'ai bien compris que la CopyFileEx rafraîchissait constamment les paramètres que l'on peut retrouver dans la procédure.
Je vais donc étudier ce que tu m'as donné au sujet de l'annulation de la copie.
Merci encore à toi.
-
- Messages : 510
- Inscription : dim. 25/mars/2007 13:44
- Localisation : Toulouse, France
- Contact :
Re: Au sujet de l'API CoyFileEx
De rien =)
Re: Au sujet de l'API CopyFileEx
Encore une fois super. Ca marche très bien l'annulation de la copie.
A noter que le dernier paramètre de la CopyFileEx je mets 0 à la place du 1.
Tous ces progrès grâce à lepiaf31.
1000 merci à lui.
A noter que le dernier paramètre de la CopyFileEx je mets 0 à la place du 1.
Tous ces progrès grâce à lepiaf31.
1000 merci à lui.