(ayuda) examinar

Iniciado por guidosl, 7 Abril 2009, 06:13 AM

0 Miembros y 3 Visitantes están viendo este tema.

guidosl

tengo este comando para examinar carpetas y derivar la ruta a un textbox
alguien sabe como adaptarlo apra q aparezcan losarchivos tmb y no solo la ruta de carpetas?


'CREE UN BOTON Y UN CUADRO DE TEXTO en un formulario nuevo

CitarOption Explicit
DefLng A-Z
'DECLARACIONES
' Este es el tipo que se pasa a la función del API SHBroseForFolder
Private Type BROWSEINFO
hWndOwner As Long 'ventana propietaria del dialogo de buscar carpetas
pidlRoot As Long 'puntero al ItemID de la carpeta raíz
pszDisplayName As String 'el nombre mostrado del objeto
lpszTitle As String 'el titulo de la ventana de dialogo
uFlags As Integer 'modificadores - ver abajo
lpfn As Long 'direccion de una funcion "callback" (opcional)
lParam As Long 'para el "callback", no utilizado
iImage As Long 'para el "callback", no utilizado
End Type
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "Shell32" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As Long
Const BIF_RETURNONLYFSDIRS As Integer = 1 'Devolver sólo directorios del Sistema de Ficheros
'--------------------------------------------------------------------------------------
' Muestra un diálogo de buscar carpetas y devuelve el path a la carpeta escogida
' o una cadena vacía si la operación se canceló. Nótese que este procedimiento sólo
' devuelve carpetas del sistema de ficheros, no carpetas virtuales como Mi Ordenador o
' el Panel de Control
'--------------------------------------------------------------------------------------
Private Function BrowseForFolder(ByVal f_HWnd As Long, Optional lpTitle As Variant) As String
On Error Resume Next
Dim lpiidl As Long, lResult As Long
Dim lpbi As BROWSEINFO
Dim lpszBuf As String
Dim lpszNameSpace As String
lpszBuf = String$(255, Chr$(0))
lpszNameSpace = String$(255, Chr$(0))
'fijar los valores iniciales
With lpbi
.hWndOwner = f_HWnd 'el propietario del diálogo (para operación modal o no modal)
.pidlRoot = vbNullString 'comenzar a partir del Escritorio
.lpszTitle = lpTitle 'el texto por encima del árbol de carpetas (NO el "caption" del diálogo)
.pszDisplayName = lpszBuf 'contendrá al volver el nombre del objeto seleccionado
.uFlags = BIF_RETURNONLYFSDIRS 'devolver sólo carpetas del sistema de ficheros
.lpfn = vbNullString 'no hay función de "callback"
.lParam = 0& 'para el "callback", no utilizado
.iImage = 0& 'para el "callback", no utilizado
End With
' Mostrar el diálogo de buscar carpetas y obtener el puntero al ItemID asociado a la carpeta escogida
lpiidl = SHBrowseForFolder(lpbi)
' Si el usuario canceló el diálogo o ocurrió un error, devolver una cadena vacía
If lpiidl = 0 Then BrowseForFolder = "": Exit Function
' Obtener el path del objeto seleccionado a partir del itemID
lResult = SHGetPathFromIDList(lpiidl, lpszNameSpace)
If lResult = 1 Then 'la función devuelve 1 si tuvo éxito, 0 si hubo algún fallo
' Devolver el path a la carpeta, quitando los caracteres nulos extras
BrowseForFolder = Left$(lpszNameSpace, InStr(lpszNameSpace, Chr$(0)))
End If
End Function


Sub Command1_Click()
Dim ShellPath As String
ShellPath = BrowseForFolder(Me.hWnd, "Escoja una carpeta")
If ShellPath <> "" Then
Text1.Text = Left(ShellPath, Len(ShellPath) - 1)
Else
MsgBox "¡Operación cancelada!"
End If
End Sub

BlackZeroX

#1
ese codigo es para el cuadro de dialogo abrir y guardar (obviamente configurando los patrones de las apis) lo que pides no estavienculadomucho con esto bien pero bueno

usa las apis

FindFirstFiles
FindNextFile
Entre otras
...

te serviran ademas hay un ejemplo en la api guide que usan estas apis para realizar una busqueda de TODO archivo de una x ruta y por subcarpetas igual

Hay otro metodo que es por FSO

Ahoa notase lo siguiente:

Por Apis es Realmente rapido.
Por FSO es LEeeeentOoo.

Source Codigo FSO

Ojala te sirva de algo.

El adaptarlo es solo devolver la ruta al proceso que te listara los archivos nada dificil realmente.
The Dark Shadow is my passion.

seba123neo

Cita de: ░▒▓BlackZeroҖ▓▒░ en  7 Abril 2009, 06:27 AM
ese codigo es para el cuadro de dialogo abrir y guardar

no, como bien el dijo es para abrir el dialogo de "Buscar Carpeta" no para el de "guardar" o "abrir archivo"...

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

guidosl

me marearon jajaja


no entendi alf inal se peude o no con ese codigo???

BlackZeroX

#4
mmm puedes usar el common dialog para realizar tal acto... (OJO no entiendo como deseas listar los archivos)

P.D.: hasta donde yo he visto ese cuadro de examinar no muestra archivosojo hasta donde yo se. para mostrar archivos y mostrar la ruta completa del archivo seleccionado por un cuadro de examinar es mejor usar el common dialog.

---Editado.
--- Source Common Dialog --- y ya.

Cuadro de diálogo Abrir archivo ( Función GetOpenFileName )

Código (vb) [Seleccionar]

Option Explicit

' Función Api GetOpenFileName _
para abrir el cuadro de diálogo seleccionar archivo
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
    Alias "GetOpenFileNameA" ( _
    pOpenfilename As OPENFILENAME) As Long

' Estructure de datos _
  OPENFILENAME para usar con GetOpenFileName
Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type


Private Sub Command1_Click()
Dim OFName As OPENFILENAME
   
    With OFName
        .lStructSize = Len(OFName)
        'Establecemos el hwnd del form
        .hwndOwner = Me.hWnd
        'Establecemos el numero de instancia de la aplicacion
        .hInstance = App.hInstance
        'Establecemos el filtro de archivos a mostrar, _
         en este caso txt y todos los ficheros
        .lpstrFilter = "Archivos de texto (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + _
                       "Todos los archivos (*.*)" + Chr$(0) + "*.*" + Chr$(0)
        'Acá debemos crear un buffer para el archivo
        .lpstrFile = Space$(254)
        'Establecemos el tamaño maximo retornado
        .nMaxFile = 255
        'Creamos un buffer para el titulo del archivo
        .lpstrFileTitle = Space$(254)
        'Establecemos el tamaño maximo retornado
        .nMaxFileTitle = 255
        'Establecemos el directorio por defecto que mostrará el dialogo
        .lpstrInitialDir = "C:\Windows"
        'El title
        .lpstrTitle = "Abrir archivos"
        'Flasgs que detereminan caracteristicas del dialogo
        .flags = 0
    End With

    'Abrimos el cuadro de diálogo pasándole _
     a GetOpenFileName la estructura anterior
    If GetOpenFileName(OFName) Then
        MsgBox "Seleccionó: " + Trim$(OFName.lpstrFile)
    Else
        MsgBox "Se canceló"
    End If
End Sub

Private Sub Form_Load()
    Command1.Caption = "Abrir CommonDialog"
End Sub


Cuadro de diálogo Guardar como ( Función GetSaveFileName )

Código (vb) [Seleccionar]

Option Explicit
'Función Api GetSaveFileName que _
llama al cuadro guardar como de windows
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
    Alias "GetSaveFileNameA" ( _
    pOpenfilename As OPENFILENAME) As Long

' UDT OPENFILENAME para el api GetSaveFileName
Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

' Variable para utilizar la estructura de la función Api
Dim OFName As OPENFILENAME


Private Function GuardarComo() As String
   
    With OFName
        'Establecmos el tamaño de la extructura
        .lStructSize = Len(OFName)
        'Establecmos el hwnd de la aplicación, es decir _
         la del form que llama al diálogo
        .hwndOwner = Me.hWnd
        'Acá la instancia
        .hInstance = App.hInstance
        'Establecemos los filtros de extension que mostrá
        '.lpstrFilter = "Archivos de texto (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + _
                        "Todos los archivos (*.*)" + Chr$(0) + "*.*" + Chr$(0)
        'Le pasamos un buffer al nombre de archivo
        .lpstrFile = Space$(254)
        'Debemos establecer el maximo de caracteres del buffer anterior
        .nMaxFile = 255
        'Lo mismo pero para el título del diálogo de windows
        .lpstrFileTitle = Space$(254)
        'Debemos establecer el maximo de caracteres del buffer
        .nMaxFileTitle = 255
        'Establecemos el drectorio inicial que mostrará el diálogo
        .lpstrInitialDir = "C:\"
        'Establecemos el titulo
        .lpstrTitle = "Guardar archivo como"
        'Los flags
        .flags = 0
    End With

    'Mostramos el dialogo pasandole la estructura a la función Api GetSaveFileName
    If GetSaveFileName(OFName) Then
        GuardarComo = Trim$(Replace(OFName.lpstrFile, Chr(0), ""))
    Else
        GuardarComo = ""
    End If
End Function

Private Sub Command1_Click()
Dim sFile As String
    'sFile almacenará el path completo que nos interesa
    sFile = GuardarComo
    'Comprobamos que no sea una cadena vacia
    If sFile <> "" Then
        MsgBox "Ruta elegida " + sFile
    Else
        MsgBox "Cancelar"
    End If
End Sub


Private Sub Form_Load()
    Command1.Caption = "Abrir CommonDialog"
End Sub 


Fuente: http://www.recursosvisualbasic.com.ar/htm/listado-api/api-27.htm
The Dark Shadow is my passion.

seba123neo

#5
Cita de: guidosl en  7 Abril 2009, 06:43 AM
me marearon jajaja


no entendi alf inal se peude o no con ese codigo???

vos queres que te aparescan los path de los arhivos de la carpeta seleccionada?? explicate bien lo que queres asi no perdemos tiempo.. :P

si queres que te aparescan los archivos en el mismo dialogo no estoy seguro si se puede o si se le puede agregar esa funcionalidad...no lo he visto...lo que si podes hacer es subclasificarlo y agregarle a ese dialogo un control listbox al lado por ejemplo que te liste los archivos de la carpeta seleccionada...
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

guidosl

ya ta  ;D


lo resolvi con un CommonDialog

es q estoy ahciendo un programita para cambiar el Wallpaper de windows y era para seleccionar la imagen q deseabas poner como fondo de escritorio


pero logre solo q me acepte imagenes .bmp el muy hijo de mil jaja

asi me quedo

Private Sub Command2_Click()
Dim documento As String
CommonDialog1.ShowOpen
documento = CommonDialog1.FileName
Text1.Text = documento

igual lo tengo q probar ahi en el mismo command 2 dps viene el resto de los comandos para cambiar el wallpaper y no se si me espera a q yo busque la imagen y la cargue en el textbox....porque de el textbox lee la ruta donde esta la imagen a reempalzar...




seba123neo

igualmente me diste una idea, y me puse a hacer una subclasifiacion para listar los archivos del dialogo ese en un lsitbox creado en el mismo dialogo..ya para mañana lo pongo aca...

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

guidosl

grrrr desde el visual me lo corre pero desde windos noooo


Citarcomponent COMDLG32.OCX. or one of its depedencies not correctly registered . a file is missing or invalid.


alguien sabe a que se debe

seba123neo

registra ese ocx..fijate si lo tenes en la carpeta del sistema..
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson