Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
202
Assunto : Visual Basic
Titulo: Selecionando uma pasta com API

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



O Common Dialog permite que nós utilizemos no VB as caixas de diálogo padrões do sistema operacional, fazendo com que nossa aplicação mantenha sempre a mesma interface gráfica do sistema operacional no qual está rodando (9x,nt,2000,etc.).

Porém uma tarefa comum não é realizada pelo Common Dialog : A seleção de uma pasta. A caixa de dialogo open/save permite selecionar um arquivo, mas não uma pasta.

Claro que nós podemos utilizar o drivelistbox e o dirlistbox para criar um formulário personalizado que permita que o usuário selecione uma pasta, mas além disso dar mais trabalho também quebra a integração da aplicação com o sistema operacional, porque o sistema operacional já tem uma caixa com essa finalidade.

Como utilizar essa caixa ? Simples : Através das API's.

Para abrirmos a caixa e obtermos seu resultado utilizamos a função SHBrowseForFolder, que recebe uma variável do tipo TBrowseInfo que contém informações para personalização da caixa que será aberta (título, por exemplo).

O retorno desta função é um código Long que identifica a pasta selecionada. Precisaremos então transformar esse código no caminho da pasta. Para isso utilizaremos a função SHGetPathFromIDList, que tem exatamente esta função.

Veja as declarações que devem ser inseridas em um módulo :

'Coloque estas declarações em um módulo
'Se colocar em um formulário lembre-se de não usar como 'Public'

'Existem outras flags para parametrizar a pesquisa
Public Const BIF_RETURNONLYFSDIRS = 1
Public Const BIF_DONTGOBELOWDOMAIN = 2
Public Const MAX_PATH = 260

Public Declare Function SHBrowseForFolder Lib "shell32" ( _
lpbi As BrowseInfo _
) As Long

Public Declare Function SHGetPathFromIDList Lib "shell32" ( _
ByVal pidList As Long, _
ByVal lpBuffer As String _
) As Long

Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _
ByVal lpString1 As String, _
ByVal lpString2 As String _
) As Long
'Tipo para def
Public 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



Veja o código de um botão no formulário :

Private Sub Command1_Click()
Dim lpIDList As Long
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BrowseInfo

'Personaliza a procura
szTitle = "Titulo da procura"
With tBrowseInfo
.hWndOwner = Me.hWnd
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_EDITBOX
End With

'Abre a janela de procura
'E retorna o caminho da pasta selecionada
lpIDList = SHBrowseForFolder(tBrowseInfo)

'Se existir alguma pasta selecionada extrair
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
MsgBox "Caminha da Pasta selecionada" + vbCrLf + vbCrLf + sBuffer
End If


End Sub



Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 10/15/2014 9:46:00 AM
nome: Fernando
email: fernando.frss@gmail.com
comentário:
Boa tarde, sei que o comentário ta meio atrasado, mas como é vb6 nada se atualizou rs.
Testei este processo acima e é bom, porém apenas para unidades locais, tenho uma máquina com unidades mapeadas e isso gera um travamento de aprox. 2minutos ao expandir o conteudo de uma delas.

Alguma ideia?


data: 6/13/2011 1:56:00 PM
nome: Anderson
email: ars@bol.com.br
comentário:
Muito boa a dica! Comigo funcionou certinho!


data: 11/9/2010 2:19:00 PM
nome: Leonardo
email: leo.kenobi@bol.com.br
comentário:
Amigo, muito obrigado pela dica, deu certinho para o que precisava. Pessoas como você que compartilham o conhecimento com o mundo, graças a intenet, é que fazem a diferença.

data: 8/27/2007 4:10:00 PM
nome: Wesley
email:
comentário:
Comigo funcionou...

data: 3/15/2007 9:53:00 AM
nome: Leonardo
email:
comentário:
Pra mim não funcionou.
Erro de compilação.


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br