2011-08-23 3 views
15

Los TSpeedButtons de Delphi 2010 no parecían realmente admitir la transparencia PNG correctamente, porque la propiedad Glyph usa un TBitmap internamente, y TBitmap es para mapas de bits, y no admite la transparencia PNG correctamente, y TSpeedButton.Glyph no puede admitir la transparencia, entonces ... actualización: Pero el problema real era que tenía algunas cosas externas (componentes de Developer Express) que estaban haciendo que el soporte PNG de Delphi no funcionara, Por otro lado, TImage, aunque todavía tiene TPicture, y puede admitir PNG, también se vio afectado por este error de Developer express.Un control de botón y reemplazo subyacente para TBitmap que maneja correctamente la transparencia PNG sin escribir el código de premezcla

Ya se formuló una pregunta acerca de here, y la respuesta muestra cómo usar la premezcla para que la transparencia no se convierta en píxeles negros. Quiero saber si hay otro botón de control que usará PNG combinados alfa cargados en designtime, y que no convierte los recursos PNG en formato BMP descartando el canal alfa y causando el borde negro que se muestra aquí.

En resumen, este control no usaría TBitmap, y no usaría la función de transparencia de la clave de color que es todo lo que TBitmap tiene.

Para repetir, no estoy preguntando cómo resolver el problema del negro alrededor del exterior mientras sigo utilizando la funcionalidad de VCL obsoleta TBitmap/TSpeedButton, porque carece de la funcionalidad de transparencia PNG moderna, estoy preguntando sobre reemplazarlo con algo más que "simplemente funciona".

Como una desventaja secundaria, la conversión de un pequeño archivo .png en un recurso de mapa de bits .DFM es esencialmente perder espacio y hacer que mi forma .DFM contenido sea demasiado grande. El almacenamiento nativo de formato de archivo .png dentro de .dfm debería hacer que los formularios resultantes sean más pequeños.

enter image description here

Actualizar: PngComponents parecen que deben trabajar, pero me dio un error Invalid Graphic format cuando intento cargar un archivo PNG en el speedbutton PNG. Tenga en cuenta que el componente de la lista de imágenes Png no tiene tales problemas. Parece que cxLibrary (un paquete de desarrollador expreso) está rompiendo cosas. Una vez que eliminé todo el desarrollador de material expreso, este problema desaparece. Entonces, aunque he seleccionado Pngcomponents como respuesta, si tiene instalado devex, use sus botones y no los pngcomponents.

enter image description here

+1

Si no desea poner imágenes en el dfm, entonces no las cargue como recursos. Este es el único enfoque sensato en mi opinión. Si coloca sus activos en los archivos dfm, entonces perderá la capacidad de mantener los activos en control de revisión. –

+1

¿Por qué no pones tus PNG en archivos .ico y los cargas en una lista de imágenes en tiempo de ejecución? –

+0

P.S. Espero que el nuevo trabajo esté funcionando para ti. –

Respuesta

11

Usted puede echar un vistazo a PngComponents. Tiene un botón TPngSpeed ​​y algunos otros controles que trabajan directamente con PngImages.

+0

Gracias. ¡Se ve bien! Creo que ya había oído hablar de ellos pero nunca los revisé. –

+1

Tuve un problema para cargar .PNGs en designtime con PngComponents, y lo rastreé a un viejo paquete de diseño RXLIB, que eliminé. Ahora recibo la excepción de formato gráfico no válido: [2108C8A0] {designide150.bpl} PicEdit.TGraphicProperty.Edit (línea 272, "PicEdit.pas" + 10) + $ 12 –

+0

confirmado. Developer Express cxLibraryD15 rompe PngComponents. Eliminé material devex de mi ide (ya no lo usamos) y no hay problema. pero como muchas personas lo usan, dejo la nota de arriba en la pregunta. Parece que si utiliza componentes de desarrollador expreso, la solución más fácil es su propio cxButton. –

2

También puede consultar el componente de software TMS llamado TAdvGlowButton, ya que admite imágenes PNG con transparencia alfa.

Link to site...

+0

¡He usado este botón y es bastante agradable! Las cosas de TMS también son geniales en general. –

2

Resulta que cxButton que viene en el paquete de desarrollador de componentes VCL expreso también soporta PNG botones.

+0

También resulta que las cosas expresas del desarrollador en PngComponents son mutuamente excluyentes. Elegir uno. –

Cuestiones relacionadas