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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 15 March 2004 17:06

Tristan Barbe
Invité

Map Basic

Bonjour,

Y at 'il une fonction sous map basic capable d'ouvrir une fenetre de type choix d'un repertoire .
Attention je ne parle pas d'un FileOpenDlgou bien d'un FileSaveAsDlg, qui permettent de pointer sur un fichier de type defini, mais d'un repertoire uniquement.

Merci

 

#2 Mon 15 March 2004 17:06

Christophe Barbier
Invité

Re: Map Basic

Non, en VB, j'utilise l'API SHBrowseForFolder mais je n'ai jamais essaye depuis MapBasic.

Si ca vous interesse, voici ci-dessous un module VB qui utilise cette API

--------------------------
Option Explicit

Private Const BIF_STATUSTEXT = &H4&
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Const WM_USER = &H400
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSELECTION = (WM_USER + 102)

Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function SHBrowseForFolder Lib shell32 (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib shell32 (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib kernel32 Alias lstrcatA (ByVal lpString1 As String, ByVal lpString2 As String) As Long

Private Type BrowseInfo
hWndOwner   As Long
pIDLRoot    As Long
pszDisplayName As Long
lpszTitle   As Long
ulFlags    As Long
lpfnCallback  As Long
lParam     As Long
iImage     As Long
End Type

Private m_CurrentDirectory As String

Public Function BrowseForFolder(owner As Form, Title As String, StartDir As String) As String
Dim lpIDList As Long
Dim szTitle As String
Dim sBuffer As String
Dim tBrowseInfo As BrowseInfo

m_CurrentDirectory = StartDir & vbNullChar

szTitle = Title With tBrowseInfo
.hWndOwner = owner.hWnd
.lpszTitle = lstrcat(szTitle,  )
.ulFlags = BIF_RETURNONLYFSDIRS ' + BIF_DONTGOBELOWDOMAIN + BIF_STATUSTEXT
.lpfnCallback = GetAddressofFunction(AddressOf BrowseCallbackProc) 'get address of function.
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
BrowseForFolder = sBuffer
Else
BrowseForFolder =
End If

End Function

Private Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lp As Long, ByVal pData As Long) As Long

Dim lpIDList As Long
Dim ret As Long
Dim sBuffer As String

On Error Resume Next ' conseille par MS

Select Case uMsg

Case BFFM_INITIALIZED
Call SendMessage(hWnd, BFFM_SETSELECTION, 1, m_CurrentDirectory)

Case BFFM_SELCHANGED
sBuffer = Space(MAX_PATH)

ret = SHGetPathFromIDList(lp, sBuffer)
If ret = 1 Then
Call SendMessage(hWnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
End If

End Select

BrowseCallbackProc = 0

End Function

Private Function GetAddressofFunction(add As Long) As Long
GetAddressofFunction = add
End Function

--------------------------

 

Pied de page des forums

Powered by FluxBB