Abrir seleccionar carpteas como si fuera vbmodal

Iniciado por MandingoPC, 8 Diciembre 2011, 01:20 AM

0 Miembros y 1 Visitante están viendo este tema.

MandingoPC

Hola soy nuevo, un gusto a todos.


LO q hago es usar la funcion Shell.BrowseForFolder con un resto de código y parámetros para que me abra el cuadrito para seleccionar una carpeta. El problema es q si se hace click en el formulario, se pierde ese cartel.

Entonces, quisiera saber como hago para q no se pueda hacer otra accion en el progrma hasta q no se cancele o seleccione un directorio. Como si fuera un vbmodal en formularios.


Ah y ya q estoy para no abrir otro topic. MI programa crea un acceso directo a un .exe. Como se hace para que ese acceso directo tenga un icono que yo quiero? (osea cambiarle el icono al acceso directo)
Gracias

MandingoPC

Podria algien porfavor ayudarme con esto? hace 3 dias que lo puse y nadie me contestó  :-X

En si es para q ese cartelito no se salga de la vista, como si fuera un vbmodal de formulariio

raul338


seba123neo

proba esto:

Código (vb) [Seleccionar]
Option Explicit

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Declare Function SHBrowseForFolder Lib "shell32" (lpBI As BrowseInfo) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer 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 Function BrowseFolder()

    Dim lpIDList As Long
    Dim sbuffer As String
    Dim szTitle As String
    Dim tBrowseInfo As BrowseInfo
    szTitle = "Choose PrLr Scheduler Sound Folder"


    With tBrowseInfo
        .hwndOwner = Me.hWnd
        .lpszTitle = lstrcat(szTitle, "")
        .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
       
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)


    If (lpIDList) Then
        sbuffer = Space(MAX_PATH)
        SHGetPathFromIDList lpIDList, sbuffer
        sbuffer = Left(sbuffer, InStr(sbuffer, vbNullChar) - 1)
       
        BrowseFolder = sbuffer
       
    End If
   
End Function

Private Sub Command1_Click()
    Call BrowseFolder
End Sub


Fuente: Make SHBrowseForFolder Modal?

el truco esta en poner BrowseInfo.hwndOwner = Me.hwnd

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

MandingoPC

#4
te agradezco mucho. Eso era tal cual lo que keria neo