JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Choix d'un répertoire Dim 6 Juil 2008 - 22:31 | |
| A ma connaissance il n'existe pas dans Panoramic de fonction de choix d'un répertoire, j'ai fait le petit essai que voici, à modifier en fonction des besoins de chacun. Je pars de la racine du disque dur ( C: ) et je n'ai pas traité les autres volumes, ça doit pouvoir se rajouter assez facilement. - Code:
-
Rem ** SELECTR.BAS, choix d'un répertoire Rem ** Clic gauche: affichage des sous-répertoires du répertoire cliqué Rem ** Clic droit: choix du répertoire et sortie Rem ** Clic sur ".": retour à la racine Rem ** Clic sur "..": retour au répertoire "parent" Rem ** Sortie: rep$ = nom complet du répertoire choisi. dim rep$, rd$, f$, Savcur$, csp$, rp$(198) dim ini%, nr%, x%, y%, yd%, ym%, lf%, hf%, il% dim xs%, ys%, nlc%, r%, c%, lc%, i%, j%, rng%, nbr%, maxtab% dim mousel%, mouser% label Re1, Reb, Sui, Term, Bcle, bcw, Fin, Iprep label Boutg, Boutd, Posclic rem ---------------------------------------------------- rep$ = "C:": rem ** répertoire de départ (racine du disque) IF DIR_EXISTS(rep$) = 0 THEN GOTO Fin csp$ = "." Savcur$ = DIR_CURRENT$: Rem Sauvegarde répertoire actuel il% = 13 : rem interligne hf% = 994: lf% = 540 :rem ** fenêtre d'affichage rem ** hauteur utile= hf-30 (bandeau) lc% = lf%/3: rem largeur d'une colonne d'affichage (3 colonnes) nlc% = INT((hf%-30) /il%): rem ** nombre de lignes par colonne WIDTH 0, lf% HEIGHT 0, hf% COLOR 0, 255, 255, 192: rem jaune clair BORDER_SMALL 0 2D_TARGET_IS 0 FONT_BOLD 0 maxtab% = 198: rem ** dimension maximum des tableaux (hélas!)
rem --------------- affichage des sous-répertoires --------------------- Re1: CLS 2D_LINE lc%-2, 0, lc%-2, hf%-1 2D_LINE 2*lc%-2, 0, 2*lc%-2, hf%-1 rem CAPTION 0,rep$ yd% = 0: ym% = yd% + nlc%*il% y% = yd% - il%: x% = 1 rd$ = rep$: IF LEN(rd$) = 2 THEN rd$ = rd$ + "\" DIR_CHANGE rd$ ini% = 0: nr% = 0 IF LEN(rep$) > 3 f$ = csp$: GOSUB Iprep f$ = csp$ + csp$: GOSUB Iprep END_IF Reb: IF ini% = 0 THEN f$ = FILE_FIND_FIRST$: ini% = 1: GOTO Sui f$ = FILE_FIND_NEXT$ IF f$ = "??????" THEN GOTO Reb: rem par exemple à la fin de C:\Windows Sui: IF f$ = "_" THEN GOTO Term IF FILE_EXISTS(rep$ + "\" + f$) = 1 THEN GOTO Reb GOSUB Iprep GOTO Reb Term: FILE_FIND_CLOSE nbr% = nr%: IF rp$(1) = csp$ THEN nbr% = nbr% - 2 CAPTION 0, rep$ + " (" + STR$(nbr%) + " répertoires)"
rem --------------- boucle d'attente ----------------------------------- Bcle: mousel% = MOUSE_LEFT_DOWN(0): mouser% = MOUSE_RIGHT_DOWN(0) IF mousel% = 0 AND mouser% = 0 THEN GOTO bcw IF mouser% = 1 THEN GOTO Boutd Boutg: rem *** clic gauche: sous-répertoire à parcourir IF MOUSE_LEFT_DOWN(0) = 1 THEN WAIT 100: GOTO Boutg: rem attente relâchement GOSUB Posclic: IF rng% = -1 THEN GOTO bcw IF rp$(rng%) = csp$ THEN rep$ = LEFT$(rep$, 2): GOTO Re1: rem racine IF rp$(rng%) = csp$ + csp$ j% = 0: rem répertoire parent FOR i% = LEN(rep$) TO 1 STEP -1 IF MID$(rep$, i%, 1) = "\" AND j% = 0 THEN j% = i% NEXT i% rep$ = LEFT$(rep$, j% - 1): GOTO Re1 END_IF rep$ = rep$ + "\" + rp$(rng%): GOTO Re1
Boutd: IF MOUSE_RIGHT_DOWN(0) = 1 THEN WAIT 100: GOTO Boutd: rem attente relâchement rem *** clic droit: choix du répertoire GOSUB Posclic: IF rng% = -1 THEN GOTO bcw IF LEFT$(rp$(rng%), 1) = csp$ THEN GOTO bcw rep$ = rep$ + "\" + rp$(rng%) PRINT_LOCATE x%, y% + il%: PRINT " ******** Répertoire: ********" PRINT_LOCATE x%, y% + 2 * il%: PRINT rep$: GOTO Fin bcw: WAIT 200 GOTO Bcle
Fin: DIR_CHANGE Savcur$: rem Retour au répertoire d'origine END
rem ------------ sous-programmes ------------------------------------- Posclic: xs% = MOUSE_X_POSITION(0) c% = INT(xs% / lc%): rem ** colonne cliquée (0 à 2) ys% = MOUSE_Y_POSITION(0) r% = INT((ys% - yd%) / il%): rem ** rangée cliquée rng% = 1 + r% + c% * nlc% IF rng% < 0 OR rng% > nr% THEN rng% = -1 RETURN
Iprep: nr% = nr% + 1: IF nr% > maxtab% THEN RETURN rp$(nr%) = f$ y% = y% + il% IF y% >= ym% THEN x% = x% + lc%: y% = yd% PRINT_LOCATE x%, y% PRINT f$: rem ** affichage du répertoire RETURN
Edit: quelques petites modifs...
Dernière édition par JL35 le Mar 8 Juil 2008 - 23:10, édité 1 fois | |
|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Choix d'un répertoire Mar 8 Juil 2008 - 19:29 | |
| - Citation :
- A ma connaissance il n'existe pas dans Panoramic de fonction de choix d'un répertoire
Il y a DIR_CHANGEavec comme explication dans le fiche du Manuel de Référence: - Citation :
- LE RÉPERTOIRE COURANT DEVIENT LE REPERTOIRE D
Cette commande DIR_CHANGE D change le répertoire courant, qui devient le répertoire D. D est le nom absolu ou relatif du répertoire.
Si D est un nom relatif, D est considéré comme un sous-répertoire du répertoire courant.
Le nom absolu du répertoire est le nom complet, par rapport à la racine du système de fichier (ex: "c:\temp\files\" ou "c:\temp\files").
Le nom relatif est le nom du répertoire par rapport au répertoire courant (ex: "files").
Mais je ne sais pas si cela répond à ton besoin, car il faut taper cette commande et cela fige le nom du répertoire. Tu aurais besoin de quoi? | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Choix d'un répertoire Mar 8 Juil 2008 - 22:59 | |
| En fait c'était pour parcourir le volume et faire choisir un répertoire à l'utilisateur du programme (voir le topic précédent: "affichage des smileys d'un répertoire", j'avais mis le répertoire en dur, mais musicgames me demandait si on pouvait faire choisir le répertoire par l'utilisateur). Je connais DIR_CHANGE, d'ailleurs je l'utilise dans mon code ci-dessus.
Le besoin c'était l'équivalent pour les répertoires (choix d'un répertoire) de OPEN_DIALOG pour les fichiers (choix d'un fichier). Evidemment on pourrait demander à l'utilisateur de taper lui-même le répertoire dans une boîte de dialogue, mais c'est moins pratique et avec risque d'erreurs que de parcourir une liste et cliquer.
Mais ce n'est pas un besoin courant à mon avis, on peut se débrouiller par programme et je ne pense pas qu'il faille une commande particulière pour ça. Comme toujours en programmation, il y a moyen de contourner l'obstacle !
Merci encore pour ta réactivité. | |
|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Choix d'un répertoire Mar 8 Juil 2008 - 23:49 | |
| OK. Je suis réactif quand j'ai une liaison internet sous la main, ce qui n'est pas toujours le cas: ces derniers temps, je me déplace beaucoup pour des raisons professionnelles. J'avoue que je n'avais pas regardé ton code. Mais je finis tôt ou tard par tout regarder en détail. | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Choix d'un répertoire Mer 9 Juil 2008 - 14:54 | |
| Incidemment tu pourras constater dans le code ci-dessus que FILE_FIND_FIRST et NEXT renvoient bien les fichiers ET les sous-répertoires. Je teste si c'est un fichier qui existe, et si non, j'en déduis que c'est un répertoire. C'est un peu lourd, mais je n'ai pas trouvé de solution plus élégante. | |
|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Choix d'un répertoire Mer 9 Juil 2008 - 20:24 | |
| J'ai bien vu toutes tes remarques sur les fichiers et repertoires renvoyées par ces deux commandes. Dès que je redeviens disponible pour PANORAMIC, je regarde tout cela dans le détail et je fais le nécessaire. En ce moment, je suis pris à 100% par d'autres activités et qui sont importantes : ellles font "bouillir la marmite". | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Choix d'un répertoire Mer 9 Juil 2008 - 21:33 | |
| Je comprends bien que la mise au point de Panoramic pourrait être une activité à temps complet, alors si c'est en plus de l'activité professionnelle on ne peut qu'être admiratif pour le boulot fourni.
En ce qui concerne FILE_FIND..., ce n'est pas forcément une mauvaise chose, il faut bien un moyen aussi de trouver les répertoires. C'était simplement une remarque par rapport au manuel. | |
|
Contenu sponsorisé
| Sujet: Re: Choix d'un répertoire | |
| |
|