Estoy trabajando en un proyecto que está compuesto por varias aplicaciones compiladas de Delphi (más de 20 exe y dll) y necesitaré compartir más de 60 imágenes (16x16, 24x24, 32x32 , ...) entre todos ellos.La mejor manera de compartir imágenes entre varias aplicaciones
He aunque en dos formas diferentes de compartir imágenes entre todas las aplicaciones, pero no estoy seguro de qué es mejor:
Idea 1:
Crear una en recursos único proyecto DLL, que contiene una referencia de enlace de recurso al archivo .res que contiene todas mis imágenes. Cada aplicación cargará el dll y leerá las imágenes necesarias que pueda necesitar en un TImageList o TImage según sus necesidades.
Pros: Permite mantener las imágenes en el repositorio en su formato original.
Contras: No podré ver las imágenes en tiempo de diseño, ya que solo se cargarán en tiempo de ejecución. También tendré que crear el mismo número de constantes que las imágenes o usar un conjunto con el mismo número de valores que las imágenes, de modo que cada imagen pueda referenciarse independientemente de su nombre en el archivo de recursos.
Idea 2:
crear un módulo de datos que se compila como BPL y se incluye como un paquete de tiempo de ejecución de todas las aplicaciones. Agregaría las imágenes a varios TImageList (dependiendo del tamaño de la imagen) o en una TPngImageList (que permite imágenes de varios tamaños en un solo componente).
Pros: Podré agregar este módulo de datos a todas las aplicaciones que necesito y ver en tiempo de diseño todas las imágenes que pueda necesitar.
Contras: Todas las imágenes se cargarán en la memoria incluso si solo necesito usar una. Necesito asegurarme de que el orden de las imágenes nunca cambie cuando agregue/modifique imágenes en TImageList/TPngImageList. Todas las imágenes se almacenarán en un solo .dfm.
Idea 3: (Nuevo)
Después de buscar en otras aplicaciones que también necesitan compartir imágenes entre exe compilados, he tenido otra idea. Guarde todas las imágenes compartidas como archivos png/ico simples en una subcarpeta donde están los archivos compilados (Datos, por ejemplo).
Pros: No es necesario cargar todas las imágenes en la memoria, solo puedo obtener las necesarias. Esto puede ser especialmente importante si el número total de imágenes es bastante grande (una aplicación que utiliza este método tiene 1400 imágenes en una subcarpeta de Datos).
Contras: Las imágenes estarán visibles/disponibles para cualquier persona. Puede consumir un poco más de espacio en disco en la máquina del usuario.
Me gustaría solicitar comentarios sobre estas dos ideas o cualquier otra sugerencia sobre cómo lograrlo.
Gracias!
En cuanto a Idea 2: ¿Sería capaz de liberar las imágenes que no necesitará en tiempo de ejecución? – Jeff
No creo que pueda liberar fácilmente las imágenes que no necesito en tiempo de ejecución, principalmente porque si elimino las que no necesito de TImageList, entonces no se asignará el índice de imagen correcto a ningún control quien usa el TImageList – smartins