Page 1 sur 1

Drag du PB 4.10 : Comment traiter les Fichiers?-> Gadget

Publié : dim. 11/nov./2007 17:55
par Ar-S
Voilà voilou,
je me suis fait un petit Archiveur/desarchiveur ZIP.

3 boutons :

- Extraire une archive
- Zipper un Fichier
- Zipper un dossier

Ils fonctionnent bien les 3.

Maintenant en plus de tout ça j'aimerai utiliser le Darg et Drop de PB 4.10
Donc je l'active dans mon openwindow

Code : Tout sélectionner

EnableWindowDrop(#WIN, #PB_Drop_Files, #PB_Drag_Copy)
Ensuite dans ma boucle principale j'utilise

Code : Tout sélectionner

Case #PB_Event_WindowDrop  
      ZIPdrop()
Voilà ma procédure ZIPdrop()

Code : Tout sélectionner

Procedure ZIPDrop()
  FichierDrop$ = EventDropFiles()
  Count  = CountString(FichierDrop$, Chr(10)) + 1
  For i = 1 To Count
    MessageRequester("test","Fichiers : "+StringField(FichierDrop$, i, Chr(10))+Chr(10))
    If pass$=""
      PureZIP_SetArchivePassword("")
    Else
      PureZIP_SetArchivePassword(pass$) 
    EndIf
    rep$=GetPathPart(FichierDrop$) 
    NomFichier$=GetFilePart(FichierDrop$)
    LongueurCHR=Len(NomFichier$)
    ArchiveName$=Left(NomFichier$,LongueurCHR - 4)+".zip"
    MyFilesToZIP.s=FichierDrop$
    MessageRequester("test","NomFichier$= "+NomFichier$+Chr(10)+"rep$= "+rep$+Chr(10)+"ArchiveName$= "+ArchiveName$)
    If PureZIP_AddFile(rep$+ArchiveName$, FichierDrop$, #PureZIP_DontStorePath = 1) 
      SetGadgetText(#Affiche,"Opération terminée")
    Else
      MessageRequester("Erreur",impossible$)
      SetGadgetText(#Affiche,titre$)
    EndIf
  Next i
EndProcedure


En compilant, si j'essaye un drag and drop, j'ai bien le Messagerequester qui m'affiche les fichiers et/ou dossier les uns après les autres.

Le problème est que si je ne dépose qu'un fichier, le zippage marche.
Mais à plus d'un fichier déposé, le prog perd les pédales.

Je ne sais pas non plus comment lui faire dicerner un fichier d'un dossier
car l'operation de zippage n'est pas la même donc Si fichier alors ZipFILE() sinonsi dossier ZipDOSSIER()

Re: Drag du PB 4.10 => comment traiter les fichiers dépos

Publié : dim. 11/nov./2007 20:31
par lionel_om
[quote="Ar-S"]

Code : Tout sélectionner

    If pass$=""
      PureZIP_SetArchivePassword("")
    Else
      PureZIP_SetArchivePassword(pass$) 
    EndIf
Peut se simplifier en :

Code : Tout sélectionner

    PureZIP_SetArchivePassword(pass$)
même si ça ne répond pas à ta question c'est déjà ça ! :D

Sinon pour repérer si c'est un dossier l'aide PB et FileSize() répondront à ta question.
Et pour le fait de si tu dépose plusieurs fichiers, on n'a pas la partie du code correspondant donc difficile à dire comme ça... Fais attention à tes caractères Chr(10). Ah si....
Mémorise "StringField(FichierDrop$, i, Chr(10))" dans une variable et travaille sur cette variable tempo à chaque itération, car tu travailles sur ta chaîne du type : "C:/...."+chr(1)+"C:/...", donc sur la mm chose à chaque itération.

Lio :wink:

Publié : dim. 11/nov./2007 22:08
par Ar-S
Merci beaucoup Lio

J'ai un peu avancé grâce à tes conseils.

Le filesize() permet maintenant à mon logiciel de faire la différence entre fichier et repertoire, ce qui est dejà super !

Par contre je n'ai pas bien compris ce que tu veux dire dans ta dernière phrase.
Mémorise "StringField(FichierDrop$, i, Chr(10))" dans une variable et travaille sur cette variable tempo à chaque itération, car tu travailles sur ta chaîne du type : "C:/...."+chr(1)+"C:/...", donc sur la mm chose à chaque itération.
Du coup c'est toujours du yaourt avec plusieurs fichiers déposés.
Et pour le fait de si tu déposes plusieurs fichiers, on n'a pas la partie du code correspondant donc difficile à dire comme ça"
Ba la boucle for next de ma procedure c'est bien ce qui doit repérer les différents fichiers non ?

Ma procédure mise à jour

Code : Tout sélectionner

Procedure ZIPDrop()
  PureZIP_SetArchivePassword(pass$)
  FichierDrop$ = EventDropFiles()
  Count  = CountString(FichierDrop$, Chr(10)) + 1
  For i = 1 To Count
    MessageRequester("test","Fichiers : "+StringField(FichierDrop$, i, Chr(10))+Chr(10))
    Resultat = FileSize(FichierDrop$)
    MessageRequester("TEST","Valeur de resultat"+Str(Resultat))
    If Resultat = -1
      MessageRequester("Alerte","Fichier inéxistant")
    ElseIf Resultat = -2
      MyFilesToZIP.s = FichierDrop$+"*.*"
      REP2:
      FichierParDefaut$ = "C:\"
      Filtre$ = "Format Zip (*.zip)|*.zip"
      Filtre=0
      Fichier$ = SaveFileRequester("Nom de l'archive à sauvegarder", FichierParDefaut$, Filtre$, Filtre) 
      If Fichier$
        RepDest$=GetPathPart(Fichier$)
        If RepDest$=FichierDrop$
          MessageRequester ("Alerte","Le répertoire de destination ne noit pas être le même que le répertoire à archiver")
          Goto REP2:
        Else
          MyZIP.s = Fichier$+".zip"
          If PureZIP_Archive_Create(MyZIP.s, #APPEND_STATUS_CREATE)
            PureZIP_Archive_Close() 
            If PureZIP_AddFiles(MyZIP, MyFilesToZIP, #PureZIP_DontStorePath = 1, #PureZIP_Recursive) 
              SetGadgetText(#Affiche,"Opération terminée")
            Else
              MessageRequester("Erreur",impossible$)
              SetGadgetText(#Affiche,titre$)
            EndIf 
          Else
            MessageRequester("Erreur",impossible$)
            SetGadgetText(#Affiche,titre$)
          EndIf  
        EndIf  
      Else
        MessageRequester("Annulé",annuler$)
        SetGadgetText(#Affiche,titre$)
      EndIf
    ElseIf Resultat>2  
      rep$=GetPathPart(FichierDrop$) 
      NomFichier$=GetFilePart(FichierDrop$)
      LongueurCHR=Len(NomFichier$)
      ArchiveName$=Left(NomFichier$,LongueurCHR - 4)+".zip"
      MyFilesToZIP.s=FichierDrop$
      MessageRequester("test","NomFichier$= "+NomFichier$+Chr(10)+"rep$= "+rep$+Chr(10)+"ArchiveName$= "+ArchiveName$)
      If PureZIP_AddFile(rep$+ArchiveName$, FichierDrop$, #PureZIP_DontStorePath = 1) 
        SetGadgetText(#Affiche,"Opération terminée")
      Else
        MessageRequester("Erreur",impossible$)
        SetGadgetText(#Affiche,titre$)
      EndIf
    EndIf
  Next i
EndProcedure


merci pour ton aide :P

Publié : dim. 11/nov./2007 23:01
par lionel_om
For i = 1 To Count
MonFichier$ = StringField(FichierDrop$, i, Chr(10))
MessageRequester("test","Fichiers : "+MonFichier$+Chr(10))
Resultat = FileSize(MonFichier$); et non pas FichierDrop$!!!!!!!!!!
...
Next i
Lio :wink:

Publié : lun. 12/nov./2007 0:23
par Ar-S
lionel_om a écrit :
For i = 1 To Count
MonFichier$ = StringField(FichierDrop$, i, Chr(10))
MessageRequester("test","Fichiers : "+MonFichier$+Chr(10))
Resultat = FileSize(MonFichier$); et non pas FichierDrop$!!!!!!!!!!
...
Next i
Lio :wink:
Ahhh c'est tout !!

Punaise me manquait pas grand chose !
En tout cas c'est formidable, ça marche au poil !
Merci beaucoup pour ton aide. Je n'ai plus qu'à ajouter une dernière condition
(Si extension de mon fichier = .zip alors extraire) et ce sera terminé.

Je suis tout content grâce à toi ! :P

Publié : jeu. 22/nov./2007 19:01
par Ar-S
Une derniere Quesion concernat le Drag n Drop du PB4.10

Pour activer le Glisser Déplacer sur une fenêtre, on utilise

Code : Tout sélectionner

EnableWindowDrop(#WIN, #PB_Drop_Files, #PB_Drag_Copy)
puis dans la boucle on utilise

Code : Tout sélectionner

Case #PB_Event_WindowDrop 
Pour un gadget, on utilise

Code : Tout sélectionner

EnableGadgetDrop(#BT_ZIP,#PB_Drop_Files,#PB_Drag_Copy)
Mais comment ensuite le faire detecté dans la boucle ?
Case #PB_Event_GadgetDrop n'existe pas.

Publié : ven. 23/nov./2007 11:24
par Fred
Tu es sur ? D'apres la doc, c'est bien #PB_Event_GadgetDrop qu'il faut utiliser.

Publié : ven. 23/nov./2007 12:04
par Backup
:lol: :lol: Grillé Ar-s

Publié : lun. 26/nov./2007 2:35
par Ar-S
Désolé pour le retard, j'étais en suisse :D
#PB_Event_GadgetDrop ??? ba je ne l'ai pas vu je regarderai ça demain.
Mici :à)

Publié : mar. 27/nov./2007 10:39
par Ar-S
en réalité, avec Japbe , l'event_gadgetdrop ne s'affichait pas automatiquement (quand il complète lui même les fonctions, ce qui m'a fait pensé qu'il s'appelait autrement.
Je vais maintenant essayé de l'utiliser à bon escient.
Merci

Publié : mer. 28/nov./2007 14:21
par gnozal
Ar-S a écrit :en réalité, avec Japbe , l'event_gadgetdrop ne s'affichait pas automatiquement (quand il complète lui même les fonctions, ce qui m'a fait pensé qu'il s'appelait autrement.
???
Quand j'écris #PB_Event_ dans jaPBe, je vois bien PB_Event_GadgetDrop dans la liste d'autocomplétion.