Título: necesito desplegar un cuadro de dialogo para directorios
Publicado por: WHK en 7 Octubre 2009, 05:20 am
Hola, estaba buscando algo como esto:
(http://www.recursosvisualbasic.com.ar/htm/listado-api/img/api-cuadro-dialogo-seleccionar-carpeta.gif)
pero quería saber como hacer funcionar la api o funcion o lo que sea de forma nativa de windows ya que solamente encuentro formularios fabricados que no sirven de mucho.
Gracias.
Título: Re: necesito desplegar un cuadro de dialogo para directorios
Publicado por: BlackZeroX en 7 Octubre 2009, 05:48 am
http://allapi.mentalis.org/apilist/FindFirstFile.shtml
hay te explican sobre las apis, FindFirstFile es para buscar Archivos y directorios. en esa pagina hay un ejemplo sobre su uso.
Dulces Lunas!¡.
Título: Re: necesito desplegar un cuadro de dialogo para directorios
Publicado por: WHK en 7 Octubre 2009, 07:20 am
de verdad gracias por darte tu tiempo en responder pero no tiene nada que ver con lo que necesito XD No necesito saber como manipular archivos sino "desplegar" una ventana de busqueda de directorios como esta: (http://www.recursosvisualbasic.com.ar/htm/listado-api/img/api-cuadro-dialogo-seleccionar-carpeta.gif) habrá alguna api o lo que sea que pueda utilizar esta ventana de forma similar al commondialog 6? o forzadamente tendré que hacer un dirlist en un form nuevo? Edito: acabo de encontrar un ejemplo pero en javascript: var objShell = new ActiveXObject("Shell.Application"); var objFolder = new Object; objFolder = objShell.BrowseForFolder(0, "Select folder", 0,"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}");
Lo guardo en un archivo x.js y le hago doble click: (http://i.elhacker.net/i?i=0YOtP7AhbHzByR5hRQhAfGVo) Necesito eso pero en VB6 :P
Título: Re: necesito desplegar un cuadro de dialogo para directorios
Publicado por: WHK en 7 Octubre 2009, 07:33 am
bueno ya lo encontré xD la función de la api se llama BrowseForFolder http://allapi.mentalis.org/apilist/774F8232380EA83E4CF374E8F31ED355.html 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 Const BIF_RETURNONLYFSDIRS = 1 Const MAX_PATH = 260 Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long) Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 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 Sub Form_Load() 'KPD-Team 1998 'URL: http://www.allapi.net/ 'KPDTeam@Allapi.net Dim iNull As Integer, lpIDList As Long, lResult As Long Dim sPath As String, udtBI As BrowseInfo With udtBI 'Set the owner window .hWndOwner = Me.hWnd 'lstrcat appends the two strings and returns the memory address .lpszTitle = lstrcat("C:\", "") 'Return only if the user selected a directory .ulFlags = BIF_RETURNONLYFSDIRS End With 'Show the 'Browse for folder' dialog lpIDList = SHBrowseForFolder(udtBI) If lpIDList Then sPath = String$(MAX_PATH, 0) 'Get the path from the IDList SHGetPathFromIDList lpIDList, sPath 'free the block of memory CoTaskMemFree lpIDList iNull = InStr(sPath, vbNullChar) If iNull Then sPath = Left$(sPath, iNull - 1) End If End If MsgBox sPath End Sub
Título: Re: necesito desplegar un cuadro de dialogo para directorios
Publicado por: seba123neo en 8 Octubre 2009, 02:13 am
mira aca tenes un ejemplo con WSH:
Diálogo de windows para seleccionar carpeta (http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/290-dialogo-buscar-carpeta-wsh.htm)
o con la api SHBrowseForFolder :
Cuadro de diálogo Buscar carpeta (http://www.recursosvisualbasic.com.ar/htm/listado-api/api-28.htm)
saludos.
Título: Re: necesito desplegar un cuadro de dialogo para directorios
Publicado por: WHK en 8 Octubre 2009, 10:13 am
si, ya las habia visto, de hecho la imagen que puse era de ese msmo lugar xD pero acá dejo la función que armé por si a alguien le hace falta: Dialogo.bas Option Explicit 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 Const BIF_RETURNONLYFSDIRS = 1 Private Const MAX_PATH = 260 Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long) Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 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 Public Function Dir_Dialogo() As String Dim iNull As Integer, lpIDList As Long, lResult As Long Dim sPath As String, udtBI As BrowseInfo With udtBI 'Set the owner window .hWndOwner = Form1.hWnd 'lstrcat appends the two strings and returns the memory address .lpszTitle = lstrcat("Seleccione el directorio", ":") 'Return only if the user selected a directory .ulFlags = BIF_RETURNONLYFSDIRS End With 'Show the 'Browse for folder' dialog lpIDList = SHBrowseForFolder(udtBI) If lpIDList Then sPath = String$(MAX_PATH, 0) 'Get the path from the IDList SHGetPathFromIDList lpIDList, sPath 'free the block of memory CoTaskMemFree lpIDList iNull = InStr(sPath, vbNullChar) If iNull Then sPath = Left$(sPath, iNull - 1) End If End If If Len(sPath) > 0 Then If Not Right(sPath, 1) = "\" Then Dir_Dialogo = sPath & "\" Else Dir_Dialogo = sPath End If End If End Function
Y funciona así: Private Sub Boton_Click() Dim Directorio As String ' Establece el directorio Directorio = Dir_Dialogo ' Verifica que haya valor, o sea que no hayan cancelado If Len(Directorio) > 0 Then Text.Text = Directorio End If End Sub
|