![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola:
Mirando el código fuente del TDBImage veo que cuando se cambia de registro y por lo tanto se dispara el método DataChanged, en éste se hace Picture.Graphic := nil, lo cual seguramente anula las propiedades de transparencia que tenías. Se me ocurre que crees un método MiPictureChanged que sustituya al que ya hay, PictureChanged (al no ser virtual no te sirve heredar de éste sino crear otro nuevo) y en el Create se lo asignas al objeto Picture: Picture.OnChange := MiPictureChanged; Y en dicho método es donde le asignas al Bitmap los valores de transparencia que tienes almacenados. Me queda la duda de si al asignar esos valores se volverá a lanzar el mismo método (MiPictureChanged) por lo que quizás debas usar un semáforo. Saludos
__________________
Guía de Estilo |
|
#2
|
|||
|
|||
|
Hola:
Lo acabo de volver a mirar y la cosa no es tan fácil. Pensaba que se podría pegar alegremente todo el código de PictureChanged a MiPictureChanged pero no es así por culpa de unas variables privadas (FPictureLoaded y FDataLink) que no podemos alterar. Bueeeno, se me ocurre algo quizás estrambótico: teniendo en cuenta que al asignar el evento MiPictureChanged al Picture (Picture.OnChange := MiPictureChanged;), dicha asignación ya está hecha en el constructor Create heredado, podríamos almacenar la referencia al método asignado en una variable del tipo TNotifyEvent:
No sé si esto servirá ... Saludos
__________________
Guía de Estilo |
|
#3
|
|||
|
|||
|
Funciona a medias
Hoa Andres, ante todo gracias por responder.
Pues funciona a medias. Te explico en un DBImage puesto sobre el formulario parece ser que lo hace bien y finalmente el color de fondo no aparece. La verdad es que he puesto una pequeña rutina que me devuelve estos tres valores que estamos intentando cambiar del Bitmap y los cambia todos menos el TransparentColor. Con el debugger puedo ver que cuando hace la asignación del TransparentColor, no se produce ningún error pero el valor del TransparentColor no varia, se queda con el mismo valor inicial que ya tenía. Además cuando coloco el DBImage alterado sobre un DBCtrlGrid se va todo al traste y muestra una sola imagen, la del panel que tiene el foco, transparente y el resto aparece con el desagradable fondo verde. Sigo investigando... Saludos.
__________________
[Aprendiz]: Por que siempre hay algo nuevo que aprender. |
|
#4
|
|||
|
|||
|
Hola Aprendiz:
Mirando la implementación de los métodos SetTransparentMode y SetTransparentColor de TBitmap, veo que ambos alteran la otra propiedad mutuamente dependiendo del valor asignado, por lo que quizás estés asignando primero el TransparentColor y si luego asignas un TransparentMode = tmAuto, el TransparentColor vuelve a clDefault. Míralo a ver. Saludos
__________________
Guía de Estilo |
|
#5
|
|||
|
|||
|
¡¡ Ufff !! Más cosas.
Ahora veo un fallo aquí, puesto que cada vez que el usuario altere una propiedad "Transparente" de tu componente, este cambio desencadenará inevitablemente un Picture.Changed que a su vez llamará a MiPictureChanged que reasigna todas, por lo que en los métodos SetTransparent, SetTransparentColor y SetTransparentMode tendrías que poner a TRUE el semáforo FCambiando (al terminar lo dejas en FALSE) para que no se dispare cada vez el PictureChanged, seguramente éso es lo que motiva ese comportamiento tan raro. Saludos
__________________
Guía de Estilo Última edición por andres1569 fecha: 16-12-2004 a las 19:17:30. |
|
#6
|
|||
|
|||
|
Hola,
No tranquilo, ese error no se produce, recuerda que hemos sacado las asignaciones al Bitmap de los Setters y lo pusimos directamente en MiPictureChanged con lo cual solo se ejecuta, gracias a los semáforos, una sola vez. Saludos. PD: De todas formas ya te digo que funciona, ahora el problema es ponerlo en un DBCtrlGrid y que también funcione para todas las fotos que carga. Esto del Replicate me está volviendo loco.
__________________
[Aprendiz]: Por que siempre hay algo nuevo que aprender. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|