2010-09-28 10 views

Respuesta

11

No dice cuál es el propósito de esto, y hay varias maneras de obtener iconos y un método puede ser mejor que otro dependiendo del propósito.

Sin embargo, para extraer cualquier número de "grande" (32x32) y/o iconos "pequeños" (16x16) * desde un archivo arbitrario, utilice la función ExtractIconEx. Esto le permite extraer uno o más iconos de cualquiera de estos dos tamaños estándar desde un archivo de icono (.ico), EXE o DLL. Un archivo de icono puede contener múltiples imágenes y esta función le permitirá obtener todas.

La función escribirá en una matriz de controladores, cada uno de los cuales puede asignar a la propiedad Handle de una instancia TIcon. Luego puede usar el TIcon methods como lo haría normalmente si hubiera cargado el TIcon de otra manera. Tenga en cuenta que lo nuevo en Delphi XE es la capacidad de copiarlo fácilmente en un mapa de bits via the Assign method. That article también muestra cómo acceder a todos los íconos de Windows stock (incorporados/estándar), si eso es lo que buscas.

(Nota al margen: Creo que la clase TIcon le permite cargar desde un archivo a través de su método LoadFromFile - esto parece estar ausente de la documentación, pero estoy bastante seguro de que existe De memoria, que sólo carga una sola. icono)

(*) en realidad, "grande" y "pequeño" puede ser diferente a 32x32 y 16x16:. usar la función GetSystemMetrics con el SM_CXICON, SM_CYICON, SM_CXSMICON y SM_CYSMICON banderas a f Indique las dimensiones de cada tipo.

+0

@David, ¡gracias! Tengo un objeto TIcon y necesito extraer todas las imágenes de él. ¿Hay alguna manera de hacerlo sin guardar el icono para archivar mediante el método SaveToFile? – Branko

+0

TIcon será una imagen de icono. Usando 'ExtractIconEx' crearía un TIcon por imagen de icono que extrae. A continuación, puede acceder a la imagen del icono 'Asignándolo' a un mapa de bits. (¿Recibió una serie de identificadores llenos? Intente llamar a 'ExtractIconEx' dos veces, la primera vez con' nIconIndex' establecido en -1 y ambos parámetros de matriz 'nil', y devolverá el número de iconos. Llámelo de nuevo con un array de ese tamaño. Consulte el artículo de MSDN para obtener más detalles.) –

+0

@David, TIcon es un icono de imagen si lo obtiene ExtractIconEx, pero ¿qué ocurre si el objeto TIcon existente tiene más de una imagen? Si guardo TIcon con 4 imágenes en el archivo (oIcon.SaveToFile) y abro este archivo con IconEditor, puedo ver las 4 imágenes y PUEDO extraer las 4 imágenes con ExtractIconEx. ¿Es posible extraer todas las imágenes del objeto TIcon, no guardar TIcon en un archivo y usar ExtractIconEx? – Branko

Cuestiones relacionadas