* 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.
CD( JUSTPATH(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
cd( JUSTPATH(IIF(","+JUSTSTEM( JUSTPATH(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 CD( JUSTPATH(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 cd( JUSTPATH(IIF(","+JUSTSTEM( JUSTPATH(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é
|