Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-08-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
Unhappy Poner un icono en un TListView según el tipo de archivo

Hola forofos de Delphi!
Estoy desarrollando un cliente FTP y tengo un problemilla, por decirlo así en el procedimiento donde me lista el directorio. Vereís:
Cuando me lista un directorio a mi me gustaria que apareciese un icono al lado del nombre de archivo o carpeta (lógico, para acerlo más atractivo), de momento, mi código recore el nombre de la linia y segun el tipo de extensión que tiene el archivo coloca un icono diferente que se encuentra en un ImageList. Ahora surge el problema: cuantos tipos de archivos hay en el mundo? Tropocientosmil, infinitos. Habia pensado en la posibilidad de que el usuario pudiese añadir tipos de archivos y definir sus iconos, pero esto es muy modesto. Después de esta introducción explicando el problema, viene mi pregunta:
Cómo (diablos) le asigno al Item del TListView el icono predefinido de Windows para ese tipo de archivo?
He buscado alguna función de las APIs, pero no he encontrado nada (no quiero decir que no esté, sólo que no la he encontrado).
Muchas gracias... Vaya... el post se ha hecho largo!
Gracias de nuevo y espero impaciente vuestra respuesta.
Responder Con Cita
  #2  
Antiguo 25-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Tienes que asignarle como lista de imágenes, las imágenes del buffer del sistema
Código Delphi [-]
  ilHandle := SHGetFileInfo('C:\', 0, shFileInfo, SizeOf(shFileInfo),
                            SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

  SendMessage(tvFileSystem.Handle, TVM_SETIMAGELIST, TVSIL_NORMAL, ilHandle);
  SendMessage(lvFileSystem.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ilHandle);
Luego cada el índice de cada ícono tienes que averiguarlo con la función SHGetFileInfo.

Te recomiendo ver el código de los ShellCtrls que trae de ejemplo Delphi, o un ejemplo llamado "Virtual Listview"

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 26-08-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
Muchas gracias, he visto el ejemplo Virtual ListView y creo que empieza a encajar todo. Muchas gracias de nuevo...
Responder Con Cita
  #4  
Antiguo 28-02-2007
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Como insertar dinamicamente imagenes de archivos en un TreeView?

Cita:
Empezado por delphi.com.ar
Tienes que asignarle como lista de imágenes, las imágenes del buffer del sistema

Código Delphi [-]
ilHandle := SHGetFileInfo('C:\', 0, shFileInfo, SizeOf(shFileInfo),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

SendMessage(tvFileSystem.Handle, TVM_SETIMAGELIST, TVSIL_NORMAL, ilHandle);
SendMessage(lvFileSystem.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ilHandle);




Luego cada el índice de cada ícono tienes que averiguarlo con la función SHGetFileInfo.

Te recomiendo ver el código de los ShellCtrls que trae de ejemplo Delphi, o un ejemplo llamado "Virtual Listview"

Saludos!
Hola! he visto tu mensaje y me parece muy bueno, pero me surgen unas dudas pues no alcanzo a entender tu codigo al 100%. Supongo que con el segmento anterior pueda obtener todos los iconos de fichero y asociarlos al TreeView, ahora, como controlo que los ficheros seleccionados tengan el icono correspondiente? Yo programe una funcion que a partir de un path me de todos los archivos y carpetas que contenga dentro recursivamente, pero ahora necesito asociarle el icono correspondiente, y es lo qu eno se como hacerlo. Las cosas que he visto por los foros no me aclaran totalmente... Intente obtener el icono del fichero, luego convertirlo a un Bitmap y annadirlo a un ImageList, pero no me funciona. Cual de las dos variantes me recomiendan? Como hacerlas?
__________________
Muchas Gracias...
Responder Con Cita
  #5  
Antiguo 28-02-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El código que indica Federico, te sirve para asociar la lista de iconos del sistema al TreeView y lo que requieres es conocer cual es el índice en esa lista del icono asociado a un archivo. Para ello es que usas la función ShGetFileInfo y sólo requieres el nombre del archivo:

Código Delphi [-]
const
  shgfiIconIndex = SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES;

var
  ShFileInfo: TShFileInfo;

begin
  ShGetFileInfo('main.pas', 0, ShFileInfo, SizeOf(ShFileInfo), shgfiIconIndex);
  Node.ImageIndex := ShFileInfo.iIcon;

En este ejemplo, paso como parámetro la cadena 'main.pas' a ShGetFileInfo. La función consulta al sistema para saber qué icono está asociado a la extensión .pas y devuelve, en la estructura ShFileInfo, el índice requerido. Ése lo asignarías a la propiedad ImageIndex del nodo, tal como muestra el ejemplo.

En este hilo hay un ejemplo adjunto que hice hace un tiempo para llenar un ListView con los archivos de un directorio, mostrando sus iconos respectivo. La técnica es exactamente la misma que para un TTreeView. Ambas componentes tienen un evento OnGetImageIndex que sería el idóneo para usar el código anterior.

// Saludos
Responder Con Cita
  #6  
Antiguo 28-02-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Vaya. No sé en qué estaba pensando. El ejemplo del otro hilo no tiene nada que ver. El ejemplo lo adjunto aquí.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip SysIcons.zip (9,1 KB, 227 visitas)
Responder Con Cita
  #7  
Antiguo 01-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En este otro ejemplo que adjunto, utilizo un TreeView que muestra los directorios, subdirectorios y archivos del folder que se especifique.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip DirTreeView.zip (3,3 KB, 276 visitas)
Responder Con Cita
  #8  
Antiguo 01-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Bonito ejemplo Roman
Responder Con Cita
  #9  
Antiguo 20-03-2009
jhcaboverde jhcaboverde is offline
Miembro
 
Registrado: nov 2006
Posts: 61
Poder: 18
jhcaboverde Va por buen camino
Roman, ante todo debo darte las gracias porque he estado buscando este ejemplo por dias, me he desesperado y hasta me escribieron pidiendo que no posteara mas hilo referente a ese tema.

Te explico:

Tengo una carpeta cun subcarpetas y archivos de textos, tengo que crear una aplicacion que recorra la carpeta y sub carpetas y archivos "como el explorador de windows" y me lo monte en un ttreeview para con otro componente al hacer click en los archivos se muestre a la derecha. el tema esta que al utilizar tu ejemplo del treeview me da un error cuando hay varias subcarpetas, me puedes ayudar
Responder Con Cita
  #10  
Antiguo 16-12-2010
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 102
Poder: 14
FENIXadr Va por buen camino
Hola Gente... vi los ejemplos de Roman y realmente estan buenisimos.. lo del ListView era lo que buscaba... ahora lo del TreeView no es exactamente lo que necesito.. la cosa es que estoy hciendo una lista de las PC's conectadas en una red y necesitaría ponerle los iconos de "Mis Sitios de Red", he buscado info de las funciones y constantes que se usan en los ejemplos pero no logro encontrar la lista que me representa las "Redes de Microsoft", los "grupos de trabajo" y todos esos iconos que justamente estan en "Mis Sitios de Red".. espero que me puedan ayudar.. desde ya muchas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:28:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi