Ver Mensaje Individual
  #2  
Antiguo 17-11-2004
<Sergio> <Sergio> is offline
Miembro
 
Registrado: sep 2004
Posts: 72
Reputación: 20
<Sergio> Va por buen camino
"Delphianos" no Delphinos, Delfinos o elfos está mejor .

Para borrar el gráfico anterior y evitar parpadear:

1.- Trabaja todo creando un Tbitmap "Mibitmap" que también tiene un Tcanvas. El bitmap debe tener la propiedad HandleType:=bmDIB (Independiente de dispositivo por lo tanto de resolución actual de pantalla) y los bits por pixel en la profundidad que más te paresca.
2.- Para mostrar en pantalla usa un TpaintBox y en su onpaint haz un bitblt(.....,SRCCOPY) del Mibitmap.canvas.handle para hacerlo un poco más rápido.

BOOL BitBlt(

HDC hdcDest, // handle of destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left corner
int nYDest, // x-coordinate of destination rectangle's upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle of source device context
int nXSrc, // x-coordinate of source rectangle's upper-left corner
int nYSrc, // y-coordinate of source rectangle's upper-left corner
DWORD dwRop // raster operation code
);

3.- En lugar de borrar simplemente haz un bitblt con la última opcion en blackness, whiteness o patcopy para usar el Tbrush (con esto "limpias" el bitmap en memoria) y luego vuelve a dibujar todos los objetos gráficos no borrados.

Para optimizar puedes hacer esto: Para cada gráfico definir un rectángulo que lo contenga. Así que cuando tengas que actualizar una parte de tu bitmap Preparas el pedazo que tiene que actualizarse primero limpiando esa parte (poniendo todo en blanco por ejemplo) y luego dibujando en esa parte sólo los gráficos cuyos rectángulos se intersectan con la figura que fue borrada.
Responder Con Cita