Ver Mensaje Individual
  #2  
Antiguo 23-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola:

No sé si en esto está la razón de la pérdida de recursos que te sucede pero creo que sí:

El TImageList es un componente que almacena las imágenes en un sólo Bitmap, es decir, que coloca las imágenes una detrás de otra consecutivamente, por eso exige que todas tengan el mismo alto y ancho - fíjate que si modificas las propiedades Height y Width automáticamente borra todos las imágenes cargadas -. Esta es una forma de ahorrar recursos, puesto que no es lo mismo consumir 10 bitmaps que 1 sólo. De esta forma, si tengo cargados por ejemplo 10 bitmaps de 16 x 16, en realidad se crea un Bitmap de 160 x 16, y cada vez que se accede a una imagen, se toma la porción del bitmap correspondiente (por ejemplo la 2ª imagen está dibujada en el rectángulo 16, 0, 32, 16; la 3ª imagen está en 32, 0, 48, 16 y así ...).

Por eso no es buena idea que heredes de un formulario con un TImageList y añadas imágenes puesto que si lo haces así, Delphi te creará un nuevo TImageList con todas las imágenes que ya había más la añadida (es decir, un desperdicio de recursos). Date cuenta de que Delphi no añade sólo la imagen añadida sino un Bitmap que las contiene todas más esa. Sería mucho pedir que Delphi guardara sólo la porción añadida, pero como digo lo coloca todo en un mismo bitmap y de ahí al .DFM. Esto lo puedes comprobar mirando el tamaño de los .DFM respectivos, si añades tan sólo una simple imagen de 16 x 16 al TImageList del form heredado, éste crece más de lo esperado.

¿Por qué te pregunta "Save changes"? No lo tengo muy claro, seguramente trata de hacer una sincronización entre forms (al ser heredado uno de otro), y si ve que el TImageList es diferente, comparando el bitmap, regenera ese Bitmap, lo guarda en el .dfm y pide salvar cambios.

Lo recomendable es que tengas todas las imágenes en un sólo TImageList, colocado por ejemplo en un DataModule al que accedan los formularios, y que cada uno use las que necesite.

A la pregunta de cómo hacer que no se cargue el Form principal, Delphi restaura el entorno de desarrollo que había al cerrar el proyecto, si cierras esa unit principal y luego el proyecto, lo normal es que al reabrir dicho proyecto no te cargue ese formulario.
__________________
Guía de Estilo
Responder Con Cita