Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour à tous
Apres avoir fait un tour sur les topics liés a mon problème, je tente de l'exposer. En fait je viens de resoudre le problème miraculeusement. Mais je prefere vous l'expliquer car apres tout ca peut servir à d'autres.
J'ai une application PB (qui tourne sur PB 9.0.1) dans laquelle on a des images avec des adresses relatives, histoire d'offrir plus de souplesse. Pour l'instant pas de souci.
Je souhaite desormais importer des données dans une datawindow. J'utilise la methode importfile, et je laisse a l'utilisateur le soin de rentrer le nom du fichier, via la fenetre de dialogue. Normal.
Problème alors mes images disparaissent. Pourquoi? Parce que la fenetre de dialogue change le répertoire courant de l'application. L'"adresse de référence" n'etant plus la meme, les images ne s'affichent donc plus. Si je mets directement le nom du fichier comme argument le problème ne se pose pas. C'est bien la fenetre de dialogue le problème.
J'ai esayé une autre méthode en scindant l'import en tant que tel et la recherche du fichier, en utilisant la fonction GetFileOpenName mais là patatras j'ai le même souci. C'est d'ailleurs tres bien expliqué dans l'aide sur la fonction :
The dialog boxes presented by GetFileOpenName and GetFileSaveName are system dialog boxes. They provide standard system behavior, including control over the current directory. When users change the drive, directory, or folder in the dialog box, they change the current directory or folder. The newly selected directory or folder becomes the default for file operations until they exit the application, unless the optional initdir argument is passed.
Donc voila, ma question etait comment pourrais je donc bien faire pour que mon répertoire courant retrouve sa valeur d'origine?
Comme je l'ai vu dans ce topic (http://pbadonf.fr/forum/viewtopic.php?id=1233) il existe une fonction qui recupere le repertoire courant. (GetCurrentDirectory()) Existerait elle la meme pour la reinitialiser apres l'execution de l'ouverture de la boite de dialogue?
Voici ce que j'ai trouvé comme solution. Dans le meme aide sur le Getfileopenname, il est possible de rajouter des flags pour 'customiser' sa fenetre de dialogue. L'un s'appelle :
7 OFN_NOCHANGEDIR Restore the current directory to its original value if the user changed the directory while searching for files. This option has no effect for GetFileOpenName on Windows NT, 2000, and XP.
Au depart je n'y croyais pas trop vu que je suis sur XP, mais bon je me suis dis pourquoi ne pas tenter d'abord, et là ca a marché. il me conserve mon repertoire. Bizarre non?
Si vous avez d'autres solutions, ou en esperant que ce retour d'experience sera utile aux futurs embetes ;)
Dernière modification par apaoletti (25-02-2010 10:21:37)
Hors ligne
Bonjour, ici et
pour ton retour.
En ce qui concerne les images, je pense que tu n'aurais pas eu les mêmes problèmes si tu les avais déclarées dans un fichier PBR au moment de la compilation. (ce qui t'aurait d'ailleurs évité de les déployer avec l'application)
Hors ligne
Yop,
Désolé de réouvrir un vieux sujet mais sous PB 11.1 j'ai eu le même problème bien que les images en adresse relatives soient déclarées dans un PBR.
Donc merci bien pour le tuyaux. Je suis sous Windows XP et l'argument OFN_NOCHANGEDIR marche.
Par contre, pour ne pas que la fenêtre explorer change de style il faut également rajouter le flag OFN_EXPLORER.
Donc pour résumer voilà à quoi ressemble l'appel de cette fonction:
GetFileOpenName("PDF Document", ls_path, ls_file, 'PDF', "Adobe PDF Files (*.pdf), *.pdf", "C:\",66)
Hors ligne
Bonjour Marty,
le fichier pbr résoud ce problème pour l'application compilée, mais pas depuis pb.
AMHA, tu as eu ce bug en tetsant ton applie depuis PB.
Hors ligne
Ah oui tiens, en effet.
Bien vu.
Hors ligne
Pages: 1