am besten du malst in ein internes TBitmap oder TPicture objekt und blittest das dann beim neu-zeichnen (OnPaint event von TPaintBox). Hier mal nen beispiel:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TfMain = class(TForm)
    btDraw: TButton;
    btMvLeft: TButton;
    btMvDown: TButton;
    btMvRight: TButton;
    btMvUp: TButton;
    pPb: TPanel;
    Pbox: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure btDrawClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure PboxPaint(Sender: TObject);
    procedure btMvDownClick(Sender: TObject);
    procedure btMvLeftClick(Sender: TObject);
    procedure btMvUpClick(Sender: TObject);
    procedure btMvRightClick(Sender: TObject);
  private
    cCVS: TBitmap;
    cX: Integer;
    cY: Integer;
  public
    { Public declarations }
  end;

var
  fMain: TfMain;

implementation

{$R *.dfm}

procedure TfMain.Button1Click(Sender: TObject);
begin
  Pbox.Repaint;
end;

procedure TfMain.btDrawClick(Sender: TObject);
begin
  cCVS.Canvas.Brush.Color:= clWhite;
  cCVS.Canvas.FillRect(Rect(0,0,100,100));
  cCVS.Canvas.Pen.Color:= clBlack;
  cCVS.Canvas.MoveTo(0,0);
  cCVS.Canvas.LineTo(100,100);
  Pbox.Canvas.CopyRect(Rect(0,0,100,100),cCVS.Canvas,Rect(0,0,100,100)); 
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
  cCVS:= TBitmap.Create();
  cCVS.Width:= 100;
  cCVS.Height:= 100;
  cX:=0;
  cY:=0;
end;

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  cCVS.Free();
end;

procedure TfMain.PboxPaint(Sender: TObject);
begin
  Pbox.Canvas.CopyRect(Rect(cX,cY,cX+100,cY+100),cCVS.Canvas,Rect(0,0,100,100));
end;

procedure TfMain.btMvDownClick(Sender: TObject);
begin
  inc(cY,5);
  Pbox.Invalidate;
end;

procedure TfMain.btMvLeftClick(Sender: TObject);
begin
  inc(cX,5);
  Pbox.Invalidate;
end;

procedure TfMain.btMvUpClick(Sender: TObject);
begin
  dec(cY,5);
  Pbox.Invalidate;
end;

procedure TfMain.btMvRightClick(Sender: TObject);
begin
  dec(cX,5);
  Pbox.Invalidate;
end;

end.