banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#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 sad)
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 sad

- 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 smile
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 ... sad

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

 

Pied de page des forums

Powered by FluxBB