bueno, tengo un problema al poner iconos en un listview.
lo que hago es cargar al principio los iconos en un imagelist, y lego cuando añado los items al listview en la parte de icono le digo que ponga el listimage(x) del imagelist.
pero a la hora de ejecutar el programa me da un fallo que dice que para usar el imagelist primero debo inicializarlo.
espero que alguien pueda ayudare. aqui dejo el codigo para que lo veais
Public Function cargar_imgs()
Dim indice As Integer
Dim img As ListImage
Dim directorio As String
directorio = App.path & "\iconos"
For indice = 1 To 8
Form5.Picture1.Picture = LoadPicture(directorio & "\" & indice & ".jpg")
Set img = Form5.ImageList1.ListImages.Add(indice, , Form5.Picture1.Picture)
Next indice
End Function
Public Function llenar_list()
Dim contador As Integer
Dim item As ListItem
Dim tamaño As Double
Form5.ListView1.ColumnHeaders.Clear
Form5.ftp.GetTextDirListing "*.*"
Form5.ListView1.ListItems.Clear
contador = 0
Form5.ListView1.ColumnHeaders.Add , , "Files", Form5.ListView1.Width / 2
Form5.ListView1.ColumnHeaders.Add , , "Size", Form5.ListView1.Width / 2
Do While Form5.ftp.GetFilename(contador) <> ""
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".jpg") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(1))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".rar") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".txt") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(7))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".pdf") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(8))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".mp3") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(2))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".avi") <> 0 Or InStr(LCase(Form5.ftp.GetFilename(contador)), ".mpg") <> 0 Or InStr(LCase(Form5.ftp.GetFilename(contador)), ".mpeg") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(3))
End If
If InStr(LCase(Form5.ftp.GetFilename(contador)), ".doc") <> 0 Then
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6))
End If
tamaño = Val(Form5.ftp.GetSize(contador)) / 1022
item.SubItems(1) = Val(Mid(Str(tamaño), 1, 4)) & " " & "Kb"
contador = contador + 1
Loop
End Function
bueno, se que el codigo se peude optimizar y el programa esta hecho con chilkatftp2, no con un API.
pero cualquier critica y consejo sera bien recibido
saludos
quiza te sirva este codigo
http://foro.elhacker.net/programacion_vb/como_poner_icono_a_un_listview1-t255963.0.html;msg1241543#msg1241543
sigue sin funcionarme, sera una tonteria pero no lo veo. me da un error que dice que el imagelist debe ser inicializado antes de usarlo. pero no se a que se refiere con eso :S
Te pregunto: El Form5 que aparece... está cargado???
Si haces referencia a un form desde un modulo, te conviene usar una variable global (a nivel modulo), que contenga una instancia del formulario
Eso seria:
Dim f5 as Form5
Luego, f5 es un objeto del tipo Form, que aun no ha sido instanciado, pero que puede ser accedido desde cualquier punto de tu aplicación.
Para intanciarlo, cargarlo y mostrarlo (por ej.), basta con hacer:
Set f5 = New Form5
Load f5
f5.Show
Creo que es por eso que te sale el error.
Saludos!
Hola, ¿ al listview le enlazaste el ImageList desde las propiedades ? igualmente para cargar las imagenes lo podes hacer en tiempo de diseño, no cargar las imagenes en tiempo de ejecución.
saludos.
el form 5 si esta activado, de echo es el main.
lo que he hecho es en vez de cargar las imagenes en ejecucion en el imagelist las he añadido en el diseño, pero aun asi no me funciona. el codigo que tengo seria este (pero para un icono, todavia no hago ningun bucle para saber que tipo de archivo es y elegir un icono u otro)
Public Function llenar_list()
Dim contador As Integer
Dim item As ListItem
Dim tamaño As Double
Form5.ListView1.ColumnHeaders.Clear
Form5.ftp.GetTextDirListing "*.*"
Form5.ListView1.ListItems.Clear
contador = 0
Form5.ListView1.ColumnHeaders.Add , , "Files", Form5.ListView1.Width / 2
Form5.ListView1.ColumnHeaders.Add , , "Size", Form5.ListView1.Width / 2
Do While Form5.ftp.GetFilename(contador) <> ""
Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6)) 'aqui el imagelist deberia poner el icono en el list
tamaño = Val(Form5.ftp.GetSize(contador)) / 1022
item.SubItems(1) = Val(Mid(Str(tamaño), 1, 4)) & " " & "Kb"
contador = contador + 1
Loop
End Function
a ver como consigo hacerlo porque no se me ocurre como :S
Perdona pero así no es...
Debes indicarle al ListView que tiene enlazado un ImageList. Luego en el Codigo, indicas el Index del Icono. Los iconos cargalos en tiempo de Diseño.
Este es el Codigo que debe tener al momento de cargar la info en el ListView.
Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), 6)
'El numero "6" identifica la posicion que tiene el icono dentro del ImageList.
Selecciona el ListView con click derecho y dale a propiedades.
Te vas a la pestaña de Lista de Imagenes. Y donde dice Normal o Pequeño, seleccionas el ImageList.
gracias ssccaann43 ahora si que funciona.
ahora hay otro problemilla, y es que esta en el listview el item, pero no aparece el icono, en el margen izquierdo esta el hueco, pero no aparece el icono :S cuantos problemas me esta dando esta tonteria, perdon si me pongo pesado amigos.