ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Comment localiser le bon dossier pour l'exécution de vos applications?   



L'auteur

eddymaue
Canada Canada
Membre Simple
# 0000000075
enregistré le 26/10/2004
Maue Eddy
j8j 8j8 Gatineau
de la société Formatek
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

Comment localiser le bon dossier pour l'exécution de vos applications?
# 0000000142
ajouté le 03/02/2005 20:42:07 et modifié le 03/02/2005
consulté 3995 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description
tout est dans le titre...
Code source :
* Quand on développe une application, plusieurs ont cette difficulté de situer leurs
* applications dans le bon répertoire avec ces sous-dossiers.
*
* Les sys(5) et sys(2003) ne nous donne pas l'emplacement du programme entrain de roulé
* mais plutôt où nous nous situons durant que l'application roule.
*
* Lorsque l'application débute. Si nous voulons nous placer dans le bon répertoire,
* c'est sys(16) qui est le bon outil à utiliser.

**** Main.prg ****
*
* Au tout début de main.prg de votre projet vous devriez placer cette ligne :
*
*        set defaut to justpath(sys(16))
*   ou
*         cd( justpath(sys(16))) && c'est ça que je préfère
*
* Que vous soyez dans un fichier "exe2, "app" ou "prg" lors de l'exécution,
* vous aurez la certitude que le programme roule dans le bon répertoire.


**** Formulaire.scx ****
*
* Dans une procédure d'un programme ou d'un formulaire, sys(16) nous retourne
* toujours exactement ce formatage de ligne.
*
*   "PROCEDURE FORM1.LOAD E:\DOWNLOAD\VFP8\UNE PETITE APPLICATION MULTIMÉDIA\PASSWD.SCT"
*
* J'ai deux certitudes quand j'analyse cette ligne. Il y aura toujours ":" et des espaces avant le ":"
* En premier on recherche l'occurrence ":" et après on recherche un ESPACE en commençant de droite vers la gauche.
*
*   p1 = at(":",sys(16))   && ici p1 = 23
*
* En second lieu on recherche l'espace situer juste avant le ":"
*
*   p2 = RAT(" ",left(sys(16),p1))  && p2 = 21
*
* Pour teminer,
*
*   Subs(justpath(sys(16),p2)
*
* On peut metre le tout dans une seule ligne en faisant des substitutions.
*
* ProcedureDefaultPath =   Subs(justpath(sys(16),RAT(" ",left(sys(16),at(":",sys(16)))))

*** AVOIR LA CERTITUDE ???? ***

* Mais encore là.  Avons-nous la certitude d'être dans le bon répertoire....?
* Où, le formulaire est t'il ?
* Dans un sous-répertoire ?

* Adevanant le cas et généralement c'est mon cas. Les formulaires je les places
* dans le sous répertoire "forms"
* comme je place mes fichiers.prg dans "progs" à l'exception de Main.prg

* Comment régler cette problématique ?

* Si ProcedureDefaultPath égalait plutôt "E:\DOWNLOAD\VFP8\UNE PETITE APPLICATION MULTIMÉDIA\FORMS"
* Nos autres fichiers, eux, sont dans d'autres sous-dossiers.

* Il faut vérifier si "forms" est dans SET("PATH")

* ? SET("PATH")  && "CLASS,DATA,DEBUG,DOC,FORMS,GRAPHICS,H,PROGS,QUERIES,REPORTS"

* Par défaut c'est ce que j'ai chez moi

* IF ","+justname(ProcedureDefaultPath)"," $","+set("path")+","
*      CD(JUSTPATH(ProcedureDefaultPath))
*   ELSE
*      CD(ProcedureDefaultPath)
*   ENDIF

* Pour finir on peut encore mettre le tout sur une seule et même ligne

* Dans une procedure d'un fichier.prg, dans une procedure d'un formulaire ou d'une classe.vcx,
* cette ligne vous mèneras tourjours à bon port.

CDJUSTPATH(IIF(","+JUSTSTEM(JUSTPATH(SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16)))))))+","$","+SET("PATH")+",",JUSTPATH(SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16)))))),SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16))))))) )

* Dans un fichier comme Main.prg c'est plus simple
cdJUSTPATH(IIF(","+JUSTSTEMJUSTPATH(SYS(16)))+"," $ ","+SET("path")+",",JUSTPATH(SYS(16)),SYS(16))) )

* Comme moi, je ne crois pas que vous puissiez retenir ces deux lignes dans votre mémoire. Je me trompte peut-être.
* Alors on peut mettre le tout dans un fichier.h

FICHIER.H
#DEFINE DU_PROCEDURE_SETDEFAULTO CDJUSTPATH(IIF(","+JUSTSTEM(JUSTPATH(SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16)))))))+","$","+SET("PATH")+",",JUSTPATH(SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16)))))),SUBSTR(SYS(16),RAT(" ",LEFT(SYS(16),AT(":",SYS(16))))))) )
#DEFINE DU_PROGRAM_SETDEFAULTO cdJUSTPATH(IIF(","+JUSTSTEMJUSTPATH(SYS(16)))+"," $ ","+SET("path")+",",JUSTPATH(SYS(16)),SYS(16))) )

* et ou DU_ veut dire D=DEFINE et que U= TYPE_UNDEFINE rien n'est retourné

Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0