Dudas varias

01/06/2005 - 01:38 por Víctor | Informe spam
Hola,

estoy desarrollando un componente heredado de ListView que me gustaría que
mostrase imágenes con más calidad que las obtenidas de un imageList. Mi idea
era crear un ImageListStreamer con las imágenes deseadas, pero es una clase
bastante dura que ni se hereda, ni se puede crear una instancia por ser el
constructor privado, ni nada de nada.

He intentado, serializando un array de imágenes y pasándolo a base 64,
simular la lista de imágenes en un fichero de recursos, pero como me
imaginaba no funciona (era simplemente un intento a la desesperada). Me
gustaría que alguien me comentase si alguien ha tenido el mismo problema y si
ha podido resolverlo.

La segunda parte es poner una imagen de fondo en el listView. Ya se que
mediante el API no es muy complicado y me va perfectamente excepto para
Windows XP, que no me muestra la imagen. He llegado a la conclusion (muy
posiblemente equivocada) que debe alguna función del API ha sido modificada
para esta versión del SO.

Comento la solución que había pensado para que en caso de no encontrar
solución, me digais los pros y los contras:

Añadir en la clase un array de bitmaps en el que introducir la versión con
calidad de las imágenes introducidas en el ImageList.

Sobreescribir el evento OnPaint del ListView para que se dibuje el fondo en
cada repintado (un poco ralentizante creo yo) y además se pinten los iconos y
textos de cada ImageListItem.

Sobreescribir el evento OnLisViewItem_IndexChanged para que cada vez que se
pulse un elemento, se redibujen todos remarcandose el que ha sido pulsado. De
esta forma en lugar de pintar la imágenes del ImageList, le indicaré que
dibuje la imagen con el mismo índice del array de imágenes creado en la
clase. Por no incluir dos arrays de bitmaps (uno por estado de elemento),
había pensado mostrar el elemento no seleccionado en escala de grises, ya que
el algoritmo de conversión es muy sencillo.

Y creo que con esta duda acabo, por poco tiempo.

Muchas gracias.
 

Leer las respuestas

#1 Jeronimo Milea
01/06/2005 - 16:07 | Informe spam
Hola Víctor, hace un tiempo encontre esto en Code Project, espero te sea
util, hace básicamente lo que necesitas... creo,

http://www.codeproject.com/cs/miscc...ntlist.asp



Hola,

estoy desarrollando un componente heredado de ListView que me gustaría
que mostrase imágenes con más calidad que las obtenidas de un
imageList. Mi idea era crear un ImageListStreamer con las imágenes
deseadas, pero es una clase bastante dura que ni se hereda, ni se
puede crear una instancia por ser el constructor privado, ni nada de
nada.

He intentado, serializando un array de imágenes y pasándolo a base 64,
simular la lista de imágenes en un fichero de recursos, pero como me
imaginaba no funciona (era simplemente un intento a la desesperada).
Me gustaría que alguien me comentase si alguien ha tenido el mismo
problema y si ha podido resolverlo.

La segunda parte es poner una imagen de fondo en el listView. Ya se
que mediante el API no es muy complicado y me va perfectamente excepto
para Windows XP, que no me muestra la imagen. He llegado a la
conclusion (muy posiblemente equivocada) que debe alguna función del
API ha sido modificada para esta versión del SO.

Comento la solución que había pensado para que en caso de no encontrar
solución, me digais los pros y los contras:

Añadir en la clase un array de bitmaps en el que introducir la versión
con calidad de las imágenes introducidas en el ImageList.

Sobreescribir el evento OnPaint del ListView para que se dibuje el
fondo en cada repintado (un poco ralentizante creo yo) y además se
pinten los iconos y textos de cada ImageListItem.

Sobreescribir el evento OnLisViewItem_IndexChanged para que cada vez
que se pulse un elemento, se redibujen todos remarcandose el que ha
sido pulsado. De esta forma en lugar de pintar la imágenes del
ImageList, le indicaré que dibuje la imagen con el mismo índice del
array de imágenes creado en la clase. Por no incluir dos arrays de
bitmaps (uno por estado de elemento), había pensado mostrar el
elemento no seleccionado en escala de grises, ya que el algoritmo de
conversión es muy sencillo.

Y creo que con esta duda acabo, por poco tiempo.

Muchas gracias.

Preguntas similares