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
|
|||
|
|||
Evitar lanzar el método Repaint
Hola a todos! Es la primera vez que posteo, aunque ya hace algún tiempo que he estado leyendo hilos, y la verdad es que me habéis ayudado bastante, aunque ahora se me ha planteado una duda que no he podido solucionar. Os comento:
Tengo un slider al que he modificado su método Paint para poder pintar alrededor de éste sombras y darle un efecto 3D, más o menos aceptable. Las sombras que aparecen a izda y drcha del slider funcionan a la perfección. Sin embargo, cuando intento pintar también las sombras que aparecen debajo de éste, cuando pinto el TImage en el que está contenida, lanza otra vez el método Paint del slider, éste repinta la sombra y se relanza, y así sucesivamente.... Utilizo a parte del slider, tres TImage: dos para las sombras laterales y una para la sombra inferior. ¿Cómo puedo evitar que reentre una y otra y otra vez en el método Paint del slider? Muchas gracias de antemano, Un saludo, LoPiTaL |
#2
|
||||
|
||||
Supongo que entre ellos se están "pisando" de ahí que se ejecuten los Paint de forma sucesiva.
Si tienes redefinido el método Paint, tal vez puedes evitar llamar al inherited. De todas forma sin ver el código es difícil.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Gracias por la rápida respuesta. Sí, tienes razón en lo de que se están pisando, por eso había dicho que las fotos laterales se mostraban bien, pero la inferior (que se pinta sobre el slider) provoca la reentrada.
El código que utilizo es relativamente simple. Lo que hago (olvidándonos de las imágenes laterales) es: -Calculo los pixeles de la imágen inferior, reduciendo el brillo de cada uno de ellos en función a una máscara previamente almacenada en memoria. -Calculo la altura a la que debe estar la imágen (siempre pegada a la palanca del slider). -Llamo al método Update de la imágen. -Llamo a inherited. El código (simplificado) es el siguiente: Código:
//Para la sombra de abajo.... topIm:=topIm+fHandlerBitmap.Height; //Cálculo de la altura (topIm //inicializada cuando las otras sombras) //Aplicación de la máscara de la sombra y cambio de brillo pixel a pixel: temp.Assign(backBottomImage.Picture.Bitmap); temp.Width:=backBottomImage.Width; temp.Height:=backBottomImage.Height; for i := 0 to temp.Height -1 do begin DestRow := fBackGroundBitmap.ScanLine[i+topIm]; for j := 0 to temp.Width - 1 do begin colorRGB:=(DestRow[J].rgbtBlue shl 16)+(DestRow[J].rgbtGreen shl 8)+DestRow[J].rgbtRed; temp.Canvas.Pixels[j,i]:=cambiaBrilloPixel(colorRGB,fShadeBitmap.Canvas.Pixels[J,I+topIm],RGBF_BGR); end; end; backBottomImage.Picture.Bitmap.Assign(temp); backBottomImage.Top:=topIm+Self.Top+1; temp.Free; //Indico que la imagen a cambiado backBottomImage.Update; inherited Paint; //Llamo al método superior Un saludo, Rubén |
#4
|
||||
|
||||
OK, a eso me refería, tal vez en algunos casos, debas evitar llamar al método inherited.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Sí, pero estoy obligado a llamar al método inherited, porque si no, no se repinta el botón del slider. De todas maneras, he probado a no llamarlo, y sigue reentrando en el Paint una y otra vez.
Un saludo, LoPiTaL |
#6
|
||||
|
||||
Cita:
De todas formas, parece que la cosa no es tan sencilla como yo imaginaba...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
|||
|
|||
Ya he encontrado la solución!! Ueeeee
He visto que existen los métodos Updating y Updated, que activan flags de dibujado. Se pueden utilizar de la siguiente forma: Código:
if (csUpdating in Self.ComponentState) then Exit; Self.Updating; {Código que quieras de dibujado... por ejemplo el Image.Update que me molestaba a mí} //Al final de la función Self.Updated Un saludo, Rubén |
#8
|
||||
|
||||
Gracias a tí por la respuesta.
Habrá que apuntarla (Updating..Updated).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Método más sencillo para lanzar una única consulta sql a BD mysql | minime | Conexión con bases de datos | 3 | 04-09-2007 20:30:44 |
Lanzar excepciones | cahern4 | Varios | 6 | 14-04-2005 22:40:23 |
Evitar la ejecución del método padre | Egroc | Varios | 3 | 22-07-2004 18:16:11 |
Lanzar procedimiento | kalimero | MS SQL Server | 6 | 27-04-2004 19:22:33 |
Lanzar evento.... | craven | OOP | 4 | 08-09-2003 22:04:05 |
|