2011-11-11 11 views
10

Estoy trabajando en un programa Delphi que mostrará un icono en la "bandeja". Lo estoy haciendo "de la manera difícil" (usando la API de Shell_NotifyIcon, etc. y no un componente, por razones que están fuera del punto aquí). Está funcionando bien, pero a veces parece que el icono está un poco "borroso" en algunos sistemas. Ahora, he experimentado usando 16x16 bmp, 32x32, etc. Parece que el sistema lo escala al tamaño necesario, pero los resultados son diferentes dependiendo de la versión del sistema operativo (o tal vez algo más) ....Mejor tamaño de icono para mostrar en la bandeja

¿Alguno de ustedes tiene alguna experiencia sobre el mejor tamaño y profundidad de color de un BMP para extraer y mostrar en la bandeja usando Shell_NotifyIcon de ListImage?

Respuesta

12

Usted debe utilizar iconos 32bpp con transparencia parcial para el mejor efecto.

El icono usa el tamaño de sistema pequeño. Obtenga esto llamando al GetSystemMetrics pasando SM_CXSMICON. Si usa escalado de fuente, puede ser, por ejemplo, 20px en lugar del 16px más común. Nunca he encontrado documentación de MS para este hecho, pero puede verificarlo fácilmente por prueba y error. No es realmente un estado de cosas feliz, pero es lo que es.

Actualización: TOndrej señala que la documentación para LoadIconMetric da su aprobación tácita del icono del área de notificaciones pueda ser de tamaño pequeño icono. No entiendo por qué esta información no está incluida con eso para los íconos de notificación.

+0

Hmm ... GetSystemMetrics (SM_CXICON) soy yo dando 32 en mi sistema ... En Por otro lado, GetSystemMetrics (SM_CXSMICON) me da 16 ...El archivo de ayuda indica que SM_CXSMICON es el ancho recomendado de un icono pequeño (seguro que no dice nada acerca de "bandeja" o "Barra de notificaciones") – Lobuno

+0

El enlace que publiqué explica que 'LIM_SMALL' corresponde a' SM_CXSMICON'. ejemplo utiliza '. LIM_SMALL' –

+0

Tiene razón! – Lobuno

7

probablemente debería incluir tanto los iconos de 32x32 y 16x16 y cargar el apropiado en tiempo de ejecución: los iconos del área

notificación debe ser consciente de alta DPI. Una aplicación debe proporcionar un icono de 16x16 píxeles y un icono de 32x32 en su archivo de recursos , y luego usar LoadIconMetric para asegurarse de que el icono correcto esté cargado y escalado apropiadamente.

(fuente: MSDN)

+0

Lamentablemente la documentación no hace el trabajo aquí. Si no coloca un ícono que tiene el tamaño de un ícono pequeño, entonces tendrá aliasing y los jaggies temidos. Esto lo sé por amarga experiencia. –

+1

Usted debe incluir una nota probable que esto sólo funciona en Vista y superior, o Windows Server 2008 y superior ('LoadIconMetric' no está disponible en las plataformas anteriores de Windows). Todavía hay muchos sistemas WinXP y Server 2003. :) –

+5

Si alguien está interesado tengo excelente código que va a crear iconos de cualquier tamaño dado un nombre de recurso y esto funciona en XP y hasta, pero aprovecha las nuevas funciones cuando existan. Podría publicar una q y responderla con mi propio código si hubiera interés. –

0

Se recomienda un solo archivo *.ico para los iconos de la aplicación. *.ico archivo puede almacenar diferentes tamaños de iconos como 16, 32, 256, etc Usted puede convertir diferentes archivos de imagen en formato ico línea here.

Para el icono de la bandeja, cabrían 16x16 o 32x32 ico.

guía MSDN Oficial de iconos: icons in Windows

Cuestiones relacionadas