BUSCAR FOTO CLICANDO NA LISTBOX

SIRIOUS 18/08/2013 10:44:39
#427713
Bom dia....
Há tempo, criei um aplicativo (VB6) que controla meus filmes em DVD.
Uma das tabelas (Access) é a de nome de Atores. No form, ao clicar no menu <Localizar>, digito
numa inputbox o nome procurado. Se digitá-lo por inteiro (e ele existir no sistema), seu nome aparecerá na
List2 e sua foto (se disponível) será exibida ao lado da List2. Se digitar uma parte do nome, então a List2 exibirá
os atores cujo nome atenda ao critério da busca. Nesse caso, como não foi digitado o nome completo, o sistema
não achará a foto do ator (que fica armazenada numa pasta do drive <C:\> ).
Este é o código que faz funcionar a rotina:


Private Sub mnuLocalizar_Click()
Set TabAtores = Banco.OpenRecordset([Ô]CadastrodeAtores[Ô], dbOpenDynaset)
Dim Achar As String, Conseguir As String
If List2.Visible = True Then List2.Visible = False
Achar = InputBox([Ô]Digite o nome desejado,[Ô] & vbNewLine & _
[Ô]ou as primeiras letras do nome:[Ô], [Ô]Procura pelo nome completo ou incompleto[Ô])
If Trim$(Achar) = vbNullString Then
Exit Sub
Else
Conseguir = [Ô]Atores Like[ô][Ô] & Achar & [Ô]*[ô][Ô]
TabAtores.FindFirst Conseguir
If TabAtores.NoMatch = True Then
MsgBox [Ô]Nada foi encontrado[Ô] & Chr(13) & _
[Ô]quanto a eventual registro de[Ô] & Chr(13) & _
[Ô]< [Ô] & UCase(Achar) & [Ô] >[Ô], vbInformation, [Ô]Pesquisa sem retorno[Ô]
List2.Visible = False
Exit Sub
Else
Dim Pesquisa As String
Pesquisa = Achar & [Ô].jpg[Ô]
lblAtor.Visible = True
If Not (Dir([Ô]C:\Filmes\Images\Ator\[Ô] & Pesquisa)) = [Ô][Ô] Then
Image1.Visible = True
lblAtor.Caption = Achar
lblAtor.Caption = UCase(lblAtor.Caption)
Set Image1 = LoadPicture([Ô]C:\Filmes\Images\Ator\[Ô] & Pesquisa)
With Image1
.Left = 105
.Height = 2692
.Top = 6508
.Width = 12665
End With
Else
Image1.Visible = False
lblAtor.Visible = False
End If
End If
End If
End Sub

Desejando acrescentar o recurso de, ao clicar num nome qualquer da List2, sua imagem (se existir) seja
exibida, e se não estiver armazenada no drive <C:\>, uma msgbox informe sobre sua inexistência, tentei
operacionalizar com o seguinte código:


Private Sub List2_DblClick()
Dim Localizar As String
Localizar = List2.Text & [Ô].jpg[Ô]
[ô]Procura na pasta abaixo o nome selecionado na List2
If Not (Dir([Ô]C:\Filmes\Image\Ator\[Ô] & Localizar)) = [Ô][Ô] Then
Set Image1 = LoadPicture([Ô]C:\Filmes\Image\Ator\[Ô] & Localizar)
With Image1
.Left = 105
.Height = 2692
.Top = 6508
.Width = 12665
End With
Image1.Visible = True
lblAtor.Visible = True
lblAtor = List2.Text
Else
Image1.Visible = False
lblAtor.Visible = False
MsgBox [Ô]Não há foto disponível[Ô]
End If
End Sub

Não funciona... A cada doubleclick num dos nomes da lista, somente a msgbox é exibida (Não há foto
disponível). Acho que o acesso não está sendo feito por conta da linha abaixo da declaração da variável
<Localizar>, em negrito.
O que estaria faltando para a Listbox aceitar a rotina de busca, e inserir a foto, ou informar sobre sua
inexistência real?
Agradeço se algum dos [ô]gurus[ô] que frequentam o forum pudesse me passar a orientação.
Grato.
SIRIOUS 18/08/2013 14:41:06
#427720
Só complementando:
Ao clicar em <Localizar> e preencher o nome do ator na inputbox, se o nome
existir, ele é exibido na ListBox em destaque. E, se possuir uma foto anexada
no drive <C:\Filmes\Image\Ator>, ela será exibida ao lado da Listbox...
SIBEMM 18/08/2013 22:43:36
#427725
Resposta escolhida
Meu caro, se me lembro bem as listas possuem uma indexação tipo vetor, tenta assim:

Localizar = List2.item(list2.selectedindex).text & [Ô].jpg[Ô]

Nem lembro direito se é assim que identifica a opção da lista.
SIRIOUS 18/08/2013 23:04:22
#427726
Obrigado, Sibemm. Usei sua dica para fazer algumas simulações, mas não obtive êxito.
Já vi alguma coisa em VB Net, mas não se aplica ao VB6...
Teoricamente, o que preciso é simplesmente dar um double click num nome qualquer da list2 e
ver exibida a foto ao lado, ou então uma msgbox informando sobre a inexistência de foto para esse
nome....
No primeiro caso (quando digito o nome completo do ator numa inputbox), a listbox é exibida, com
o nome selecionado e surge a foto ou a msgbox...
Enquanto espero que algum dos colegas possa me dar uma luz, vou seguindo e pesquisando pela
net.... Se conseguir resultado, informo aqui mesmo.
Obrigado.
OMAR2011 19/08/2013 15:54:32
#427786
Já achou.
Se não vou colocar como eu mudei pouco coisa.
SIRIOUS 19/08/2013 19:55:46
#427812
mande aí Omar....
(ainda não consegui visualizar nada, acessando uma base de dados via listbox).
Francisco.
OMAR2011 19/08/2013 20:53:51
#427818
Mudei alguma coisa só para teste onde tive resultado positivo.
Caminho da pasta e diferente.Quanto a busca não modifiquei
pois Dao estou defasado.
Segue
Private Sub List1_Click()
Dim Localizar As String
Localizar = List1.Text & [Ô].jpg[Ô]
[ô]Procura na pasta abaixo o nome selecionado na List2
If Not (Dir([Ô]C:\Filmes\[Ô] & Localizar)) = [Ô][Ô] Then
Set Image1 = LoadPicture([Ô]C:\Filmes\[Ô] & Localizar)
With Image1
[ô].Left = 105
[ô].Height = 2692
[ô].Top = 6508
[ô].Width = 12665
End With
Image1.Visible = True
[ô]lblAtor.Visible = True
[ô]lblAtor = List2.Text
Else
Image1.Visible = False
[ô]lblAtor.Visible = False
MsgBox [Ô]Não há foto disponível[Ô]
End If
End Sub

Private Sub mnuLocalizar_Click()
Set Db = OpenDatabase(App.Path & [Ô]\Tabelas2.mdb[Ô])
[ô]Set Tb = Db.OpenRecordset([Ô]clientes[Ô])
Set Tb = Db.OpenRecordset([Ô]CadastrodeAtores[Ô], dbOpenDynaset)
Dim Achar As String, Conseguir As String
[ô] If List2.Visible = True Then List2.Visible = False
Achar = InputBox([Ô]Digite o nome desejado,[Ô] & vbNewLine & _
[Ô]ou as primeiras letras do nome:[Ô], [Ô]Procura pelo nome completo ou incompleto[Ô])
If Trim$(Achar) = vbNullString Then
Exit Sub
Else
Conseguir = [Ô]Atores Like[ô][Ô] & Achar & [Ô]*[ô][Ô]
Tb.FindFirst Conseguir
If Tb.NoMatch = True Then
MsgBox [Ô]Nada foi encontrado[Ô] & Chr(13) & _
[Ô]quanto a eventual registro de[Ô] & Chr(13) & _
[Ô]< [Ô] & UCase(Achar) & [Ô] >[Ô], vbInformation, [Ô]Pesquisa sem retorno[Ô]
[ô]List2.Visible = False
Exit Sub
Else
[ô] Dim Pesquisa As String
[ô]Pesquisa = Achar & [Ô].jpg[Ô]
[ô] lblAtor.Visible = True
[ô]If Not (Dir([Ô]C:\Filmes\[Ô] & Pesquisa)) = [Ô][Ô] Then
[ô]Image1.Visible = True
[ô]lblAtor.Caption = Achar
[ô]lblAtor.Caption = UCase(lblAtor.Caption)
[ô]Set Image1 = LoadPicture([Ô]C:\Filmes\[Ô] & Pesquisa)
[ô]List2.Visible = True
[ô]With Image1
[ô].Left = 105
[ô] .Height = 2692
[ô].Top = 6508
[ô].Width = 12665
[ô] End With
[ô] Else
[ô] Image1.Visible = False
[ô]lblAtor.Visible = False
[ô] End If
[ô] End If
[ô] End If
With Tb
Dim Localizar As String
Localizar = Achar & [Ô].jpg[Ô]
[ô]Procura na pasta abaixo o nome selecionado na List2
If Not (Dir([Ô]C:\Filmes\[Ô] & Localizar)) = [Ô][Ô] Then
Set Image1 = LoadPicture([Ô]C:\Filmes\[Ô] & Localizar)
With Image1
[ô].Left = 105
[ô].Height = 2692
[ô].Top = 6508
[ô].Width = 12665
End With
Image1.Visible = True
[ô]lblAtor.Visible = True
lblAtor = Achar
Else
Image1.Visible = False
[ô]lblAtor.Visible = False
MsgBox [Ô]Não há foto disponível[Ô]
End If
Do Until .EOF [ô]percorre o recordset ate o fim

[ô]inclui os itens correspondentes
List1.AddItem Tb([Ô]Atores[Ô])
[ô]List1.ItemData(Controle.NewIndex) = Tb([Ô]Atores[Ô])
.MoveNext

Loop
[ô]fecha o recordset
.Close
End With

Set Tb = Nothing [ô]libera o recordset
Exit Sub
End If
End If
End Sub
SIBEMM 19/08/2013 21:15:51
#427821
Faz um simples teste:
Citação:


Private Sub List1_Click()
Dim Localizar As String
Localizar = List1.Text & [Ô].jpg[Ô]
msgbox Localizar


E verifica se realmente está pegando o texto que deveria. Se sim, menos mal, se não faz desse jeito:

Citação:


Private Sub List1_Click()
Dim Localizar As String

For i = 0 To List1.ListCount - 1
If List1.Selected(i) Then [ô] se estiver selecionado
Localizar = List1.Text & [Ô].jpg[Ô]
End If
Next i

SIRIOUS 20/08/2013 07:18:06
#427823

obrigado, Alisson. Deu exatamente o resultado que eu estava querendo. Veja o script:

Private Sub List2_Click()
Dim Pesquisa As String, I As Integer
For I = 0 To List2.ListCount - 1
If List2.Selected(I) Then
Pesquisa = List2.Text & [Ô].jpg[Ô]
End If
Next I
lblAtor.Visible = True
If Not (Dir([Ô]C:\Filmes\Images\Ator\[Ô] & Pesquisa)) = [Ô][Ô] Then
Image1.Visible = True
lblAtor.Caption = List2.Text
lblAtor.Caption = ConverteMaiuscula(lblAtor.Caption)
Set Image1 = LoadPicture([Ô]C:\Filmes\Images\Ator\[Ô] & Pesquisa)
With Image1
.Left = 105
.Height = 2692
.Top = 6508
.Width = 12665
End With
Else
Image1.Visible = False
lblAtor.Visible = False
If lblQuant.Visible = True Then lblQuant.Visible = False
MsgBox [Ô]Foto não encontrada...[Ô] & vbNewLine & _
List2.Text & [Ô].[Ô], vbOKOnly + vbApplicationModal + vbInformation, [Ô]Fotos de atores e diretores[Ô]
End If
End Sub

Muito obrigado pela colaboração Agradeço também a Omar2011 pela força.
Sirious.
Tópico encerrado , respostas não são mais permitidas