Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2009
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 07-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 07-04-2009
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
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
Toda ayuda se agradece,
Un saludo,
Rubén
Responder Con Cita
  #4  
Antiguo 07-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #5  
Antiguo 07-04-2009
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 07-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por LoPiTaL Ver Mensaje
Sí, pero estoy obligado a llamar al método inherited, porque si no, no se repinta el botón del slider.
Bueno, me refería a no llamarlo en unas determinadas condiciones. Está claro que si dejas de llamarlo en todos los casos no va a realizar las tareas correspondientes.

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.
Responder Con Cita
  #7  
Antiguo 07-04-2009
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
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
Muchas gracias por la ayuda Neftali.

Un saludo,
Rubén
Responder Con Cita
  #8  
Antiguo 07-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Thumbs up

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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 12:08:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi