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 14-12-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Evitar el refresco de un TImage como fondo de un form

Hola compañeros del foro !

Tengo una imagen de fondo en un TImage en un form. También tengo iconos sobre la misma imagen que logro mover y cambiar de sitio en tiempo de ejecución.

Pero mi problema es que cada vez que muevo el icono, me provoca un refresco indeseado de la imagen que resulta en un 'flickeo' de la imagen de fondo bastante desagradable.

Habrá manera de evitar ese 'flickeo' de la imagen de fondo mientras estoy ejecutando la operación de movimiento de mi icono ?

Muchas gracias por vuestra ayuda.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 14-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por gluglu
Habrá manera de evitar ese 'flickeo' de la imagen de fondo mientras estoy ejecutando la operación de movimiento de mi icono ?
Pues eso depende de la versión de delphi que tengas, si el formulario dispone de la propiedad DoubleBuffered bastara con ponerla a TRUE y el parpadeo desaparecerá. Por ejemplo, en el OnCreate del formulario:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered:= TRUE;
end;

Si por el contrario, no dispones de esa propiedad por tratarse de una versión antigua de delphi no te quedara mas remedio que crear tu internamente un buffer y manejar todos los gráficos tu mismo por código. Aunque no se si te compensara tanto trabajo.
Responder Con Cita
  #3  
Antiguo 14-12-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Domingo !

Qué rapidez ! Ya lo he probado.

Por cierto, nuestro estimado compañero David en su momento me permitió crear mi avatar con la versión de Delphi y la base de datos que utilizo, ... y en ella se vé que estoy utilizando Delphi 9 , o en este caso más avanzado, Delphi 2006, en su versión VCL.net

Con el DobleBuffered := True funciona bien el 'no' refresco del TImage de fondo, aunque se refresca al final del todo y aun se nota el 'flickeo'.

Lo que pasa es que en el caso de poner la propiedad DobleBuffered a verdadero, no me muestra el movimiento del icono que estoy moviendo, con lo cual el efecto tampoco es el deseado, porque hasta que no dejo de mover el ratón, no se muestra la posición en la que he dejado el icono.

Por lo tanto, no me sirve esta opción.

Lo raro, y es por lo que inicié este hilo, es que con cualquier otro form creado como MDIChild, que es mi caso, al moverlo no me produce el dichoso parpadeo, pero con un icono posicionado (y moviéndolo) sobre el mismo form principal, si que se me dá el parpadeo.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 14-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
A lo mejor lo que esta "fallando" es el código que utilizas para mover el icono. Si pudieras poner un poco de código, le echábamos un vistazo.
Responder Con Cita
  #5  
Antiguo 14-12-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
El icono, y dos labels asociados, los muevo con los eventos OnMouseDown, OnMouseMove y OnMouseUp :

Código Delphi [-]
procedure TMainform.Icon01MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Dragging  := True;
  DragPoint := Point(X, Y);
end;
 
procedure TMainform.Icon01MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Dragging then begin
    Icon01.Left   := Icon01.Left + X - DragPoint.X;
    Icon01.Top    := Icon01.Top  + Y - DragPoint.Y;
    Label01a.Left := Icon01.Left - 34;
    Label01a.Top  := Icon01.Top  + 34;
    Label01b.Left := Icon01.Left - 34;
    Label01b.Top  := Icon01.Top  + 48;
  end;
end;
 
procedure TMainform.Icon01MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Dragging := False;
end;

El TImage tiene cargada una imagen JPG, y la propiedad Strech := True, con el TImagen ocupando todo el fondo del form MDIForm principal, con la propiedad Align := alClient;
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 14-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Yo para hacer esto, suelo emplear un código parecido, aunque uso solo un evento. Por ejemplo, aquí tengo una imagen que ocupa todo el formulario (Streach:= TRUE; Align:= alClient; ) y otra mas pequeña que es la que muevo. En el evento OnMouseMove de esta última coloco los siguiente:

Código Delphi [-]
procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  P: TPoint;
begin
  GetCursorPos(P);
  if ssLeft in Shift then
  begin
    Image2.Top:= Image2.Top + P.Y - AnteriorP.Y;
    Image2.Left:= Image2.Left + P.X - AnteriorP.X;
  end;
  AnteriorP:= P;
end;

Siendo AnteriroP una variable declarada de la siguiente manera:
Código Delphi [-]
TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    AnteriorP: TPoint;      // < -- Aqui esta declarada
  public
    { Public declarations }
  end;

Este ejemplo, una vez coloca la propiedad DoubleBuffered a TRUE no muestra ningún tipo de parpadeo, y la imagen 2 se puede mover perfectamente.
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
Color de fondo de un TImage Drake OOP 1 03-08-2006 19:36:36
Omagen de fondo Form MDI silviodp OOP 1 24-12-2004 12:05:45
Como evitar que el usuario cierre la form! Waldo API de Windows 2 20-11-2003 18:46:47
Como mover un Timage por la form Dantael Gráficos 1 17-11-2003 07:46:56
Imagen de Fondo en form lafirma OOP 1 28-08-2003 18:59:41


La franja horaria es GMT +2. Ahora son las 23:20:13.


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