#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


