Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2008
ivanloco ivanloco is offline
Miembro
 
Registrado: abr 2006
Posts: 30
Poder: 0
ivanloco Va por buen camino
Ahora tengo otra duda, si quiero que el fondo sea una imagen cargada en un componente Image, como hago para que este se vea cuando borro la posicion anterior de la ficha?
Responder Con Cita
  #2  
Antiguo 05-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Pues para 'borrar' la imagen debes copiar el mismo trozo que habia antes en ese lugar. Esto lo puedes conseguir teniendo un TImage no visible con todo el fondo cargado y ir copiando de ella segun necesites. Para eso puedes usar el metodo copyrect de TCanvas. Saludos.

PD : De todas maneras, el doublebuffered a true (tanto del form como de donde muevas) te optimizara el parpadeo.
Responder Con Cita
  #3  
Antiguo 05-10-2008
ivanloco ivanloco is offline
Miembro
 
Registrado: abr 2006
Posts: 30
Poder: 0
ivanloco Va por buen camino
Gracias por la pronta respuesta, pero podrias poner aunque sea un pseudocodigo de como seria ya que mire la funcion pero no entiendo como funciona. Lleva tres parametros: rectangulo destino, un canvas y el rectangulo origen.

Gracias
Responder Con Cita
  #4  
Antiguo 06-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, te pongo el mismo ejemplo que en la ayuda de delphi

Código Delphi [-]
var
  Bitmap: TBitmap;
  MyRect, MyOther: TRect;
begin
  MyRect := Rect(10,10,100,100);
  MyOther := Rect(10,111,100, 201);
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('c:\windows\tartan.bmp');
  Form1.Canvas.BrushCopy(MyRect, Bitmap, MyRect, clBlack);
  Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
  Bitmap.Free;
end;

MyRect es la zona de Form1 donde se va a copiar, bitmap.canvas es el canvas origen, y MyOther es el 'trozo' que se coje de bitmap.canvas.
saludos
Responder Con Cita
  #5  
Antiguo 06-10-2008
ivanloco ivanloco is offline
Miembro
 
Registrado: abr 2006
Posts: 30
Poder: 0
ivanloco Va por buen camino
Perdon por seguir insistiendo, pero finalmente decidi tratar de implementar el doble buffer porq me ayudaria en varias cosas.
Encontre en un articulo (http://delphi.about.com/library/bluc/text/uc052102g.htm) esta solucion :

Código:
Bmp := TBitmap.Create;
try
  Bmp.Width := ClientWidth;
  Bmp.Height := ClientHeight;

  // Draw lines onto the **bitmap's** canvas 
  for i := 0 to 20000 do
  begin
    Bmp.Canvas.MoveTo(Random(ClientWidth), Random(ClientHeight));
    Bmp.Canvas.LineTo(Random(ClientWidth), Random(ClientHeight));
  end;

  Canvas.Draw(0,0, Bmp); // draw the bitmap to screen now
finally  
  Bmp.Free;
end;
Lo que esto trata de hacer es, primero dibujar todo al canvas del componente TBitmap y luego pasarselo al Canvas del form.
Parece ser una buena solucion para dibujar todo de una y que no se vea como se va dibujando paso a paso.
El problema que tengo es que uso un componente timer y cada vez que ejecuta llama a este codigo de manera que la imagen vuelve a parpadear.
Active la propiedad Doublebuffer del form a true pero no cambia en nada el resultado, ya no se que hacer.
Si alguien se da cuenta de mi error por favor digame como solucionarlo. Gracias
Responder Con Cita
  #6  
Antiguo 07-10-2008
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 835
Poder: 24
gatosoft Va camino a la fama
Bueno, la tecnica del Doble Buffer evita el parpadeo... no tendría por que fallarte.... a menos que el tiempo de tu ttimer fuera inferior al tiempo que tarda en dibujarse la figura... Por otro lado, activar la propiedad Doublebuffer del form es como redundar...

Practica aumentando el tiempo de tu ttimer, por ejemplo a 5 segundos, o mas (dependiendo de como lo tengas) y verifica si te sigue pasando... si no pasa quiere decir que el problema es con el ttimer....

Si sigue pasando entonces el problema está en algo de la logica de tu codigo....
Responder Con Cita
  #7  
Antiguo 07-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
activar la propiedad Doublebuffer del form es como redundar...
no bien bien. Asi se creara un solo bitmap para todo en memoria, y al pintar pintaria el bitmap de la form, mientras que de la otra manera pintaria la form directamente a pantalla y luego el bitmap correspondiente a TBitmap, este si, desde memoria mediante el doblebuffered. Se gana poco, si, pero se gana. Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Dibujando líneas en Canvas JAV Gráficos 1 27-09-2007 15:56:05
Dibujando en un TListView pepon386 Gráficos 1 20-01-2006 09:36:28
Dibujando en capas blueicaro Gráficos 1 26-04-2005 09:46:02
Canvas does not allow drawing MADV01 Impresión 1 02-04-2004 15:08:43
Canvas???? craven Gráficos 2 17-05-2003 13:26:02


La franja horaria es GMT +2. Ahora son las 19:43:39.


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