#1 Mon 03 September 2007 09:43
- setta
- Participant occasionnel
- Lieu: ghardaia
- Date d'inscription: 31 Jul 2007
- Messages: 13
extraire un chemin (path)
bonjour
je travail sur une application mapbasic sous mapinfo, une action necessite le choix d'un chemin pour sauver un nouveau fichier ou table créer.
Il existe des comandes tel que /PathToDirectory$/fileopendlg/
mais la premier n'offre pas la posibilité de parcourir les repertoires pour fair le choix, la deuxieme ouvre des fichiers et non pas des directory.
alors que je doit recuperer un chemin de directory
voila en détail le problème rencontré, y a t'il une solution !
mercie...
Hors ligne
#2 Mon 03 September 2007 10:53
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: extraire un chemin (path)
Bonjour,
Ghardaia...ça fait réver !! (même si ma dernière visite remonte à ...1974 )
Sérieusement, il y a 2 solutions:
- pas très élégant mais efficace, l'utilisation de FileOpenDlg permet de naviguer dans les répertoires (comme dans l'explorateur Windows) et il suffit alors de demander à l'utilisateur de cliquer sur n'importe leque des fichiers du répertoire choisi pour obtenir un chemin complet de fichier (s_filespec = "c:\rep1\rep2\bidule.truc")
On peut ensuite, par PathToDirectory$(s_filespec), extraire le chemin complet du répertoire choisi (c:\rep1\rep2\)
Inconvénient: pas de choix possible d'un répertoire vide
- la seconde est plus complexe et fait appel aux API de Windows. Elle permet, dans un équivalent de l'explorateur Windows, de choisir directement un répertoire (même s'il est vide)
Hors ligne
#3 Mon 03 September 2007 11:17
- setta
- Participant occasionnel
- Lieu: ghardaia
- Date d'inscription: 31 Jul 2007
- Messages: 13
Re: extraire un chemin (path)
Ce n'est pas encore trop tard, Ghardaia est plus belle qu'en 74!
Maurice .. Ghardaia vous ouvre ces cinq portes, venez en profiter alors !!!
Comme vous l'avez dit c'est pas élégant. J'ai deja essayé cette solution mais pour une application destinée a un simple utilisateur je trouve ça inacceptable du point de vue ergonomie..
Je pense qu'il on pas omis de fournir des commandes mapbasic qui le permettent ..alors que je n'arrive pas a les retrouver.
....on approndit toujours.....
merci de nouveau
Hors ligne
#4 Mon 03 September 2007 12:12
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: extraire un chemin (path)
Désolé, il n'y a pas de commande MapBasic qui le permettent directement ...
Maintenant que MapBasic est gratuit on devrait aussi ouvrir une "wishlist" à son sujet
Ci-dessous un exemple de code utilisant les API shell32 et ole32 de Windows, à compiler pour juger:
Code:
Include "MapBasic.def" Include "Menu.def" Declare sub main Declare sub dir_handler Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Integer) define MAX_PATH 260 Type BrowseInfo hWndOwner As Integer pIDLRoot As Integer pszDisplayName As String lpszTitle As String ulFlags As Integer lpfnCallback As Integer lParam As Integer iImage As Integer End Type Declare Function choixrepert(byval sPrompt As String) As String Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA"(lpbi As BrowseInfo) As Integer Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidList As Integer, lpBuffer As String) As Integer Dim repertoire As String '------------------------------- Sub main() Dialog title "Chemin" Control Button Calling dir_handler Title "dossier ?" End Sub '------------------------------- Sub dir_handler Dim test as String test=choixrepert("cliquer sur le disque ou dossier choisi") If test="" then repertoire=ApplicationDirectory$() Else If right$(test,1)="\" Then repertoire=test Else repertoire=test+"\" End If End if print "Le chemin du dossier choisi est : "+repertoire End Program End Sub '------------------------------- Function choixrepert(byval sPrompt As String) As String Dim nNull,lpIDList,nResult,retval As Integer Dim sPath As String Dim bi As BrowseInfo bi.hWndOwner = 0 bi.pszDisplayName = Space$(MAX_PATH) bi.lpszTitle = sprompt bi.ulFlags = 0 lpIDList = SHBrowseForFolder(bi) If lpIDList <> 0 Then sPath = Space$(260) nResult = SHGetPathFromIDList(lpIDList, sPath) If nResult <> 0 Then sPath = Rtrim$(sPath) End If Call CoTaskMemFree(lpIDList) End If choixrepert= sPath Call CoTaskMemFree(bi.pIDLRoot) End Function '-------------------------------
ps: désolé, toujours ce vilain fond noir pour le code ...
Hors ligne
#5 Mon 03 September 2007 17:08
- setta
- Participant occasionnel
- Lieu: ghardaia
- Date d'inscription: 31 Jul 2007
- Messages: 13
Re: extraire un chemin (path)
mercie ...
j'ai bien saisie l'ideé et sa me convient trés bien !
a bientot.
Hors ligne