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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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()
Dernière modification par Ar-S le jeu. 22/nov./2007 19:01, modifié 2 fois.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

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

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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.
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Tu es sur ? D'apres la doc, c'est bien #PB_Event_GadgetDrop qu'il faut utiliser.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:lol: :lol: Grillé Ar-s
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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 :à)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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.
Répondre