2011-03-15 10 views
6

Al abrir un formulario que contiene un TImageList heredado en Delphi (2010 en este caso, pero puede hacerlo para otras versiones), el IDE invariablemente (no puedo encontrar ninguna rima o ritmo para ello) agrega los datos de imagen nuevamente a la forma heredada. Esto luego aumenta el tamaño del ejecutable. ¿Alguien sabe por qué y cómo puedo evitar que suceda? Repito, la imagen tiene no cambiado.Delphi IDE cambia la lista de imágenes en archivos DFM heredados

+2

Lo que hago es colocar la lista de imágenes en un módulo de datos y agregarla a la cláusula uses de sus formularios. El diseñador debería poder verlo – Jamie

+1

@Jamie: ¡haz que una respuesta! –

+0

Plugs Plugs @jeroen - Agregado – Jamie

Respuesta

2

Mi recomendación: nunca guarde imágenes en archivos .dfm. Siempre colóquelos en los archivos de recursos y recupere el control de su aplicación.

4

Esto no es una "solución" al problema, sino más una explicación de lo que está sucediendo. Los datos de imagen para una lista de imágenes dada se almacenan como una burbuja binaria de datos. Este conjunto de datos se obtiene de la implementación IMAGELIST subyacente de comctl32.dll.

Lo que está sucediendo es que, por alguna razón, la implementación de Windows en comctl32.dll está transmitiendo los datos de imagen de forma diferente entre la instancia "ancestro" y la instancia "descendiente". Para Windows, no hay relación entre estas dos instancias.

La forma en que funciona la herencia de formas es que realiza una comparación de propiedad por propiedad entre el "descendiente" y el "ancestro" durante la transmisión para determinar si una propiedad determinada debe escribirse en el formulario. Debido a que los datos de la imagen son una mancha opaca de sustancia pegajosa, todo lo que podemos hacer es una comparación byte a byte entre lo que la instancia de TImageList en el ancestro escribe y lo que escribe la instancia de TImageList en el descendiente. Si solo un byte fuera diferente, el sistema de transmisión no tiene más remedio que escribir los datos de la instancia descendiente con la presunción de que algo ha cambiado. Por ejemplo (y realmente no conozco los detalles ya que es opaco), si el blob de goo contenía una marca de tiempo, es concebible que cada vez que se escriba los datos serían diferentes.

5

Lo que hago es poner la lista de imágenes en un módulo de datos y luego agregarlo a la cláusula uses de formularios. El diseñador de formularios podrá ver la lista de imágenes

+0

En la mayoría de mis proyectos, tengo uno o más módulos de datos de recursos que contienen este tipo de listas de imágenes. –

Cuestiones relacionadas