FORUM DU LANGAGE PANORAMIC
Développement d'applications en Langage Basic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S’enregistrerS’enregistrer  ConnexionConnexion  
 

Choix d'un répertoire

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35




Inscrit le : 29 Nov 2007
Messages : 115

MessageSujet: Choix d'un répertoire   Dim 6 Juil - 22:31:22

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 - 23:10:06, édité 1 fois
Revenir en haut Aller en bas
panoramic
Admin



Inscrit le : 28 Mai 2007
Messages : 239

MessageSujet: Re: Choix d'un répertoire   Mar 8 Juil - 19:29:05

Citation:
A ma connaissance il n'existe pas dans Panoramic de fonction de choix d'un répertoire


Il y a DIR_CHANGE
avec 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?
Revenir en haut Aller en bas
JL35




Inscrit le : 29 Nov 2007
Messages : 115

MessageSujet: Re: Choix d'un répertoire   Mar 8 Juil - 22:59:49

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é.
Revenir en haut Aller en bas
panoramic
Admin



Inscrit le : 28 Mai 2007
Messages : 239

MessageSujet: Re: Choix d'un répertoire   Mar 8 Juil - 23:49:20

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.
Revenir en haut Aller en bas
JL35




Inscrit le : 29 Nov 2007
Messages : 115

MessageSujet: Re: Choix d'un répertoire   Mer 9 Juil - 14:54:08

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.
Revenir en haut Aller en bas
panoramic
Admin



Inscrit le : 28 Mai 2007
Messages : 239

MessageSujet: Re: Choix d'un répertoire   Mer 9 Juil - 20:24:49

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".
Revenir en haut Aller en bas
JL35




Inscrit le : 29 Nov 2007
Messages : 115

MessageSujet: Re: Choix d'un répertoire   Mer 9 Juil - 21:33:57

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.
Revenir en haut Aller en bas

Choix d'un répertoire

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DU LANGAGE PANORAMIC :: Votre code-