[résolu] saveas : rafraichir ExploComboG et ExploListG ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

[résolu] saveas : rafraichir ExploComboG et ExploListG ?

Message par kerkael »

Talut !

J'essaye de rajouter une choix saveas / enregistrer sous à mon interface, et je me heurte à la synchronisation des modifications des gadgets.

Si je touche l'ExplorerComboG je demande à mettre à jour l'ExplorerListG ...
Mais quand je touche l'ExplorerListG, comment ne pas entrer en boucle pour que l'ExploComboG soit mis à jour ?

Merci de votre aide :roll:

Voici mon code :


Structure ftype
  intitule.s
  format.s
EndStructure
;{ Définition;
Dim myCBGchoice.ftype(4)
myCBGchoice(0)\intitule= "CSV (délimité par virgule) (*.csv)"
myCBGchoice(0)\format= "*.csv"
myCBGchoice(1)\intitule= "Page Web (*.htm; *.html)"
myCBGchoice(1)\format= "*.htm;*.html"
myCBGchoice(2)\intitule= "Fichiers texte (*.txt; *.text)"
myCBGchoice(2)\format= "*.txt;*.text"
myCBGchoice(3)\intitule= "Tous les fichiers"
myCBGchoice(3)\format= "*.*"
;}
largeur=430
If openwindow (0, 0, 0, largeur, 360, "Enregistrer sous" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
   ;{ Installation des gadgets
  myECG= explorercombogadget ( #PB_Any ,10,10,240,25, getcurrentdirectory ())
  myELG= explorerlistgadget ( #PB_Any , 10, 45, largeur-20 ,250 , getcurrentdirectory ()+ "*.csv" , #PB_Explorer_MultiSelect )
  myTGfile= textgadget ( #PB_Any ,10,305,90,20, "Nom du fichier :" )
  mySGfile= stringgadget ( #PB_Any ,110,300,largeur-220 ,20, "FileName" )
  myBGsave= buttongadget ( #PB_Any ,largeur-90,300,80,20, "Enregistrer" )
  myTGtype= textgadget ( #PB_Any ,10,330,100,20, "Type :" )
  myCBG= comboboxgadget ( #PB_Any ,110,325,largeur-220 ,20)
  myBGcancel= buttongadget ( #PB_Any ,largeur-90,325,80,20, "Annuler" )
   For dumpvar=0 To 3
     addgadgetitem (myCBG, dumpvar, myCBGchoice(dumpvar)\intitule)
   Next
   setgadgetstate (myCBG,0)
   ;}
   ;{ Boucle Principale
   Repeat
    EventID = waitwindowevent ()
     If EventID = #PB_Event_Gadget
       Select eventgadget ()
           ;{ Modification du répertoire par l'exploComboGagdet ou Modification du type de fichier par la ComboBox
         Case myECG, myCBG ;si on change le repertoire depuis l'ExploCombo ou si on change le type de fichier depuis ComboBox
          dumpvar= getgadgetstate (myCBG) ;quel choix de type de fichier depuis le ComboBox
          mytype$=myCBGchoice( getgadgetstate (myCBG))\format ;on récupère le type de fichier depuis le tableau
          mydir$= getgadgettext (myECG) ;on récupère le repertoire depuis l'ExploCombo
          myfulldir$=mydir$+mytype$ ;association repertoire + extension
           setgadgettext (myELG,myfulldir$) ;Change l'affichage de l'explorerListGadget avec la bon repertoire et la bonne extension
           Debug str (dumpvar)+ " " +mytype$+ " " +mydir$+ " " +myfulldir$
           ;}
           ;{ Modification du répertoire par l'ExploListGadget
         Case myELG ;si on change le repertoire depuis l'ExploList
          dumpvar= getgadgetstate (myCBG) ;quel choix de type de fichier depuis le ComboBox
          mytype$=myCBGchoice( getgadgetstate (myCBG))\format ;on récupère le type de fichier depuis le tableau
          mydir$= getgadgettext (myELG) ;on récupère le repertoire depuis l'ExploList cette fois ci
          myfulldir$=mydir$+mytype$ ;association repertoire + extension
           ;SetGadgetText(myELG,myfulldir$) ;si je modifie ELG ici, je pars en boucle !
           ;SetGadgetText(myECG,mydir$) ;si je modifier ECG, et comme ECG modifie ELG, je pars en boucle
           ;}
           ;{ Annuler
         Case myBGcancel
           Break
           ;}
       EndSelect
     EndIf
   Until EventID= #PB_Event_CloseWindow
   ;}
EndIf
Dernière modification par kerkael le mer. 20/mai/2009 17:44, modifié 1 fois.
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: saveas : comment rafraichir ExploComboG et ExploListG ?

Message par gnozal »

kerkael a écrit :Si je touche l'ExplorerComboG je demande à mettre à jour l'ExplorerListG ...
Mais quand je touche l'ExplorerListG, comment ne pas entrer en boucle pour que l'ExploComboG soit mis à jour ?
Solution de facilité : une boucle de type While WindowEvent() : Wend par exemple pour 'manger' les évènements :

Code : Tout sélectionner

Structure ftype 
  intitule.s
  format.s 
EndStructure 
;{ Définition; 
Dim myCBGchoice.ftype(4) 
myCBGchoice(0)\intitule= "CSV (délimité par virgule) (*.csv)" 
myCBGchoice(0)\format= "*.csv" 
myCBGchoice(1)\intitule= "Page Web (*.htm; *.html)" 
myCBGchoice(1)\format= "*.htm;*.html" 
myCBGchoice(2)\intitule= "Fichiers texte (*.txt; *.text)" 
myCBGchoice(2)\format= "*.txt;*.text" 
myCBGchoice(3)\intitule= "Tous les fichiers" 
myCBGchoice(3)\format= "*.*" 
;} 
largeur=430 
If OpenWindow (0, 0, 0, largeur, 360, "Enregistrer sous" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered ) 
  ;{ Installation des gadgets 
  myECG= ExplorerComboGadget ( #PB_Any ,10,10,240,25, GetCurrentDirectory ()) 
  myELG= ExplorerListGadget ( #PB_Any , 10, 45, largeur-20 ,250 , GetCurrentDirectory ()+ "*.csv" , #PB_Explorer_MultiSelect ) 
  myTGfile= TextGadget ( #PB_Any ,10,305,90,20, "Nom du fichier :" ) 
  mySGfile= StringGadget ( #PB_Any ,110,300,largeur-220 ,20, "FileName" ) 
  myBGsave= ButtonGadget ( #PB_Any ,largeur-90,300,80,20, "Enregistrer" ) 
  myTGtype= TextGadget ( #PB_Any ,10,330,100,20, "Type :" ) 
  myCBG= ComboBoxGadget ( #PB_Any ,110,325,largeur-220 ,20) 
  myBGcancel= ButtonGadget ( #PB_Any ,largeur-90,325,80,20, "Annuler" ) 
  For dumpvar=0 To 3 
    AddGadgetItem (myCBG, dumpvar, myCBGchoice(dumpvar)\intitule) 
  Next 
  SetGadgetState (myCBG,0) 
  ;} 
  ;{ Boucle Principale 
  Repeat 
    EventID = WaitWindowEvent () 
    If EventID = #PB_Event_Gadget 
      Select EventGadget () 
          ;{ Modification du répertoire par l'exploComboGagdet ou Modification du type de fichier par la ComboBox 
        Case myECG, myCBG ;si on change le repertoire depuis l'ExploCombo ou si on change le type de fichier depuis ComboBox 
          dumpvar= GetGadgetState (myCBG) ;quel choix de type de fichier depuis le ComboBox 
          mytype$=myCBGchoice( GetGadgetState (myCBG))\format ;on récupère le type de fichier depuis le tableau 
          mydir$= GetGadgetText (myECG) ;on récupère le repertoire depuis l'ExploCombo 
          myfulldir$=mydir$+mytype$ ;association repertoire + extension 
          SetGadgetText (myELG,myfulldir$) ;Change l'affichage de l'explorerListGadget avec la bon repertoire et la bonne extension 
          Debug Str (dumpvar)+ " " +mytype$+ " " +mydir$+ " " +myfulldir$ 
          ;} 
          ;{ Modification du répertoire par l'ExploListGadget 
        Case myELG ;si on change le repertoire depuis l'ExploList 
          ;If EventType() <> #PB_EventType_Change
          dumpvar= GetGadgetState (myCBG) ;quel choix de type de fichier depuis le ComboBox 
          mytype$=myCBGchoice( GetGadgetState (myCBG))\format ;on récupère le type de fichier depuis le tableau 
          mydir$= GetGadgetText (myELG) ;on récupère le repertoire depuis l'ExploList cette fois ci 
          myfulldir$=mydir$+mytype$ ;association repertoire + extension 
          SetGadgetText(myELG,myfulldir$) ;si je modifie ELG ici, je pars en boucle ! 
          SetGadgetText(myECG,mydir$) ;si je modifier ECG, et comme ECG modifie ELG, je pars en boucle 
          While WindowEvent() : Wend ; <----------- 
          ;} 
          ;{ Annuler 
        Case myBGcancel 
          Break 
          ;} 
      EndSelect 
    EndIf 
  Until EventID= #PB_Event_CloseWindow 
  ;} 
EndIf
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message par kerkael »

Merci ... :? Ca fait pas très propre, quand même ... Je veux dire que ça clignote encore.

Entretemps je me suis orienté vers ça :


   Repeat
    EventID = waitwindowevent ()
     If EventID = #PB_Event_Gadget
       Select eventgadget ()
         Case myECG ;si on change le repertoire depuis l'ExploCombo
           Select eventtype ()
             Case #PB_EventType_LeftClick


Avec la vérification du type d'événement survenant sur chaque gadget en plus de vérifier quel gadget avait été touché, je me suis approché de la solution ...

Mais comme j'avais encore des difficultés dans certains cas, j'ai remplacé mon EplorerListGadget par un ExplorerTreeGadget, et mes rafraichissements se sentent beaucoup mieux.

Alors voilà mon code pour un menu SaveAs / Enregistrer Sous, à base d'ExplorerTreeGadget et ExplorerComboGadget qui tient compte de l'extension du fichier.

Vos commentaires sont les bienvenus.
En particulier je pense que je n'ai pas été très bon pour la validation du nom de fichiers, à faire des If Not findstring à répétition :wink:

Structure ftype
  intitule.s
  format.s
  formatpref.s
EndStructure

;{ Définitions;
Dim myCBGchoice.ftype(4)
myCBGchoice(0)\intitule= "CSV (délimité par virgule) (*.csv)"
myCBGchoice(0)\format= "*.csv"
myCBGchoice(0)\formatpref= ".csv"
myCBGchoice(1)\intitule= "Page Web (*.htm; *.html)"
myCBGchoice(1)\format= "*.htm;*.html"
myCBGchoice(1)\formatpref= ".htm"
myCBGchoice(2)\intitule= "Fichiers texte (*.txt; *.text)"
myCBGchoice(2)\format= "*.txt;*.text"
myCBGchoice(2)\formatpref= ".txt"
myCBGchoice(3)\intitule= "Tous les fichiers"
myCBGchoice(3)\format= "*.*"
myCBGchoice(3)\formatpref= ""
;}

largeur=430
If openwindow (0, 0, 0, largeur, 360, "Enregistrer sous" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
   ;{ Installation des gadgets
  myECG= explorercombogadget ( #PB_Any ,10,10,240,25, getcurrentdirectory ())
  myETG= explorertreegadget ( #PB_Any ,10,45,largeur-20,250, getcurrentdirectory ())
  myTGfile= textgadget ( #PB_Any ,10,305,90,20, "Nom du fichier :" )
  mySGfile= stringgadget ( #PB_Any ,110,300,largeur-220 ,20, "FileName" )
  myBGsave= buttongadget ( #PB_Any ,largeur-90,300,80,20, "Enregistrer" )
  myTGtype= textgadget ( #PB_Any ,10,330,100,20, "Type :" )
  myCBG= comboboxgadget ( #PB_Any ,110,325,largeur-220 ,20)
  myBGcancel= buttongadget ( #PB_Any ,largeur-90,325,80,20, "Annuler" )
   For dumpvar=0 To 3
     addgadgetitem (myCBG, dumpvar, myCBGchoice(dumpvar)\intitule)
   Next
   setgadgetstate (myCBG,3)
   ;}
  
   ;{ Boucle Principale
   Repeat
    EventID = waitwindowevent ()
     If EventID = #PB_Event_Gadget
       Select eventgadget ()
         Case myECG ;si on change le repertoire depuis l'ExploCombo
           ;{
           Select eventtype ()
             Case #PB_EventType_LeftClick
              dumpvar= getgadgetstate (myCBG) ;quel choix de type de fichier depuis le ComboBox
              mytype$=myCBGchoice( getgadgetstate (myCBG))\format ;on récupère le type de fichier depuis le tableau
              mydir$= getgadgettext (myECG) ;on récupère le repertoire depuis l'ExploCombo
              myfulldir$=mydir$+mytype$ ;association repertoire + extension
               setgadgettext (myETG,mydir$)
           EndSelect
           ;}
          
         Case myCBG ; si on change le type de fichier depuis ComboBox
           ;{
          dumpvar= getgadgetstate (myCBG) ;quel choix de type de fichier depuis le ComboBox
          mytype$=myCBGchoice( getgadgetstate (myCBG))\format ;on récupère le type de fichier depuis le tableau
           If getgadgetstate (myETG)=2
            mydir$= getgadgettext (myETG) ;on récupère le repertoire depuis l'ExploCombo
           Else
            mydir$= getpathpart ( getgadgettext (myETG))
           EndIf
          myfulldir$=mydir$+mytype$ ;association repertoire + extension
           setgadgettext (myETG,myfulldir$) ;Change l'affichage de l'explorerListGadget avec la bon repertoire et la bonne extension
           ;}
          
         Case myETG
           ;{
           Select eventtype ()
             Case #PB_EventType_LeftClick
               If getgadgetstate (myETG)=1
                myfilename$= getfilepart ( getgadgettext (myETG))
               Else
                myfilename$= ""
                 setgadgettext (myECG, getpathpart ( getgadgettext (myETG)))
               EndIf
               setgadgettext (mySGfile,myfilename$)
           EndSelect
           ;}
          
         Case myBGcancel
           ;{
           Break
           ;}
          
         Case myBGsave
           ;{ saveas
          myfilename$= getgadgettext (mySGfile)
          mypathname$= getgadgettext (myECG)
          myfilepart$= trim ( getfilepart (myfilename$))
           If Not findstring (myfilepart$, "*" ,0)
             If Not findstring (myfilepart$, "?" ,0)
               If Not findstring (myfilepart$, ";" ,0)
                 If Not findstring (myfilepart$, "|" ,0)
                   If Not findstring (myfilepart$, ":" ,0)
                    myExtensionpart$= getextensionpart (myfilename$)
                     Debug myExtensionpart$
                     Select myExtensionpart$
                       Case "" , "."
                        dumpvar= getgadgetstate (myCBG) ;quel choix de type de fichier depuis le ComboBox
                        myExtensionpart$=myCBGchoice( getgadgetstate (myCBG))\formatpref ;on récupère le type de fichier depuis le tableau
                         Debug myfilepart$ + " " + myExtensionpart$
                       Default
                        myfilepart$= left (myfilepart$, len (myfilepart$)- len (myExtensionpart$))
                         Debug myfilepart$ + " " + myExtensionpart$
                     EndSelect
                     If myfilepart$<> ""
                      myfilename$=mypathname$+myfilepart$+ myExtensionpart$
                       Debug myfilename$
                       ;ENTRER ICI LE CODE DE SAUVEGARDE DE CE QUE VOUS VOULEZ SAUVEGARDER
                     EndIf
                   EndIf
                 EndIf
               EndIf
             EndIf
           EndIf
           ;}
       EndSelect
     EndIf
   Until EventID= #PB_Event_CloseWindow
   ;}
  
EndIf
Répondre