Ver Mensaje Individual
  #7  
Antiguo 26-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
hola de nuevo, te dejo el mismo codigo que puse adaptado a Timage : eso si, no estoy seguro que sea del todo correcto, tendrias que probar el saveto y el loadfrom para saber si realmente funciona, pues no se bien bien que relacion hay entre las clases timage, la tpicture y la tbitmap correspondiente.

Código Delphi [-]
procedure TForm1.Guarda;
var
     i : integer;
begin
     label1.Caption := inttostr(index);

     if index = 200 - 1 then  // si hay mas de 200, 'movemos' todos para el principio, perdiendo la primera pantalla guardada
     for i := 1 to 200 - 2 do
     bitblt(deshacer[i-1].Canvas.Handle,0,0,deshacer[i-1].Width,deshacer[i-1].Height,deshacer[i].Canvas.Handle,0,0,SRCCOPY);

     bitblt(deshacer[index].Canvas.Handle,0,0,Width,Height,Image1.Picture.Bitmap.Canvas.Handle,0,0,SRCCOPY);

     if index < 200 - 1 then Inc(index);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
     i : integer;
begin
     doublebuffered := true;
     Color := $220000;
     Label1.Font.Color := clWhite;
     Label1.Caption := '0';
     for i := 0 to 200 - 1 do
     begin
          deshacer[i] := TBitmap.Create;
          deshacer[i].Width  := ClientWidth;
          deshacer[i].Height := ClientHeight;
     end;

     index := 0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
     i : integer;
begin
     for i := 200-1 downto 0 do
     deshacer[i].Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     if index = 0 then exit;

     dec(index);

     bitblt(Image1.Canvas.Handle,0,0,ClientWidth,ClientHeight,deshacer[index].Canvas.Handle,0,0,SRCCOPY);
     Refresh;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
     op : integer = 10;
     xo : integer = 0;
     yo : integer = 0;
begin
     Image1.Canvas.Pen.Color := random($FFFFFF);
     Image1.Canvas.MoveTo(xo,yo);
     Image1.Canvas.LineTo(x,y);

     op := op + 1;

     xo := X;
     yo := Y;

     if op > 10 then begin Guarda; op := 0; end;
end;
Responder Con Cita