2011-08-13 18 views
12

Quiero cargar un PNG con fondo transparente en un TImageList y usarlo en un TMainMenu (a través de TAction).
Sin embargo, en Delphi el fondo es simplemente negro. ¿El soporte PNG está implementado solo a medias en Delphi?Imagen PNG transparente (con TImageList) en un TMainMenu

This tipo dice que funcionó para él, pero con un botón en lugar de un menú principal.

Mi configuración:

  • Mi imagen es de 8 bits por color y de 8 bits para el canal de transparencia (he tratado también con 1 bit de transparencia, pero aún no funciona). La imagen se ve bien en cualquier otro programa.
  • Delphi XE.
  • En el editor de TImageList, el "color transparente" y el "color de relleno" están configurados en "Predeterminado" y están deshabilitados.

CUIDADO CON EL COMPORTAMIENTO INESPERADO:

DELPHI perderá todos IMÁGENES (en el formulario completo no sólo en TImageList) cuando el usuario cambia el valor de la propiedad ColorDepth.

El error se puede reproducir bajo demanda. Las imágenes perdidas pueden recuperarse del archivo DFM anterior, desde la carpeta 'histoy'.

+1

Hola RRuz. Yo uso un TImageList. Tiene una propiedad DrawingStyle y solo se puede configurar como 'transparente' (que aún no funciona). Pero no hay cd32bit. Lo sentimos – Ampere

+2

me refiero a la propiedad 'ColorDepth' debe ser setted a' cd32Bit' – RRUZ

+0

Actualización: hay una propiedad ColorDepth pero si lo fijo a '' cd32Bit las imágenes no están pintados más en el menú. – Ampere

Respuesta

4

Aquí está la solución: http://www.aha-soft.com/faq/delphi-imagelist-png.htm
CUIDADO: se borrarán (sin previo aviso además todas las imágenes de su TImageList) por lo que la solución es sólo para aquellos que tienen sólo unas pocas imágenes cargadas. RESPALDA TUS imágenes y tu archivo DFM también.

En mi caso, tengo mucho más de 100 por lo que no es muy productivo para mí exportar todas las imágenes una por una y volver a cargarlas en el mismo orden.

Por lo tanto, la conclusión es que Delphi XE aún no está listo para trabajar con archivos PNG transparentes (en TImageList). Será mejor que regrese a mi antigua biblioteca de PNG de terceros o simplemente utilice imágenes de BMP sin formato.


Actualización:

Y esto es cómo hacerlo bajo Delphi 7: http://www.ic0de.org/showthread.php?10477-TUT-Working-with-delphi-s-imagelist-and-transparency

+0

Delphi XE está casi lista para trabajar con PNG de canal alfa de acuerdo con su enlace. Pero debes saber cómo trabajar con el editor TImageList. La forma en que usamos es tener todas las imágenes respaldadas en un directorio y numeradas, p. 000_image1.png, 001_image2.png, etc. Luego, en cada cambio, simplemente borramos la lista de imágenes y recargamos las imágenes de este directorio, se puede hacer con un comando Agregar ... y las imágenes se ordenan tal como estaban antes.Sin embargo, hay un problema (hoy trivial): sin los temas de tiempo de ejecución activados, la transparencia PNG no funciona en Delphi XE. –

6

He estado usando TPngComponents desde Delphi 7. Eso proporciona una muy buena compatibilidad png para la mayoría de los componentes de construcción/terceros de Delphi. Embarcadero había adquirido otro conocido componente de Soporte de PNG de Fuentes Abiertas conocido como TPngImage y incorporado en el soporte gráfico nativo de Delphi en versiones posteriores de Delphi. Entonces, cuando cambié a Delphi 2010, creo que Delphi ahora tenía soporte nativo y probaba el soporte nativo, pero descubrí que el soporte alfa no es lo suficientemente bueno.

Así que había usado de nuevo TPngComponents y tenía un mejor soporte para la mayoría de los componentes, incluido el menú principal . Creo que ese paquete debería poder usarse con DXE con modificaciones limitadas.

editar: Gracias por Uwe Raabe por señalar el producto Codegear (ahora Embarcadero) comprado fue otro componente TPngImage en lugar de TPngComponent.

+1

Ok. Gracias. Entonces es un error de Delphi. Volveré al buen viejo formato BMP. Larga vida a Delphi y las interfaces GUI 'modernas' que podemos crear con él. – Ampere

+0

PngComponents no fue comprado por CodeGear (ahora Embarcadero). Ese fue solo el apoyo PNG de Gustavo Daud. PngComponents es y siempre ha sido un paquete de componentes basado en el soporte PNG creado por Martijn Saly. La versión actual es válida para D2009 y superior. –

+0

@Uwe Rabbee Oh, lo comprobé y sí, mezclé TPngImage con TPngComponent. El detalle de Codegear (ahora Embarcadero) se puede encontrar en [Nick Hodges Blog] (http://blogs.embarcadero.com/nickhodges/2008/08/13/39100). No importa por qué el soporte nativo de Delphi es diferente del componente TPNG que estaba usando. Gracias por señalar eso y modificaré mi mensaje. – Justmade

12

No hay razón para todo el archivo de copia de seguridad DFM.

Antes de hacer algo en su ImageList debe exportar sus imágenes: haga clic en el botón "Exportar" en el editor de listas de imágenes y guardará todas las imágenes en un único archivo .BMP.

después de cambiar propiedades: ColorDepth = cd32Bit, DrawingStyle = dsTransparent

debe hacer clic en "Agregar" y seleccione el archivo exportado anteriormente. Luego, las imágenes se dibujarán con transparencia en el menú y en las barras de herramientas (al menos en D2010) ... No es necesario usar componentes de terceros.

+1

Si su botón 'exportar' exporta todas las imágenes a la vez, ¿cómo exporta una sola imagen? (en mi caso, el botón 'Exportar' exporta solo una imagen. – Ampere

+1

Este botón puede hacer 2 cosas. 1) Si no tiene nada seleccionado en la lista de "Imágenes", exportará todas las imágenes en la lista de imágenes. 2) Si se seleccionan uno o más iconos, exportará solo las imágenes seleccionadas. – djsoft

+0

¿Cómo se "selecciona nada" en la lista "Imágenes"? Cuando hago doble clic en el componente 'TImageList' la primera imagen siempre se selecciona inicialmente, y al hacer clic en el botón ** Exportar ** insistiré en exportar solo esa imagen. ¿Cómo se exporta una lista de imágenes completa? –

Cuestiones relacionadas