Vamos a ir por partes, o mejor por trozos
Primero lo que tu pides:
Código Delphi
[-]
procedure DibujarTrozo(Filename: string; Count, Index: Integer; Dest: TCanvas);
var
Ancho: Integer;
begin
with TBitmap.Create do
try
LoadFromFile(Filename);
Ancho:= Width div Count;
Dest.CopyRect(Rect(0,0,Ancho,Height), Canvas,
Rect(Ancho*Index,0,Ancho*(Index+1),Height));
finally
Free;
end;
end;
Para utilizar esa funcion, pasale como parametro la ruta del bmp con los diferentes dibujos uno a continuacion del otro en horizontal, pasale tambien el numero de elementos que contine y el indice del que quieres dibujar teniendo en cuenta que el primero sera el 0 y el ultimo Count-1. Por ejemplo, si el bitmap tiene 10 elementos:
Código Delphi
[-]
DibujarTrozo('d:\1.bmp',10,0,Canvas);
DibujarTrozo('d:\1.bmp',10,9,PaintBox1.Canvas);
DibujarTrozo('d:\1.bmp',10,5,Image1.Canvas);
Ahora te digo lo que haria yo, utilizaria un TImageList y en el OnCreate del formulario utilizaria esto para cargar las imagenes:
Código Delphi
[-]
var
Bitmap: TBitmap;
begin
Bitmap:= TBitmap.Create;
try
Bitmap.LoadFromFile('d:\1.bmp');
ImageList1.Width:= Bitmap.Width div 10; ImageList1.Height:= Bitmap.Height;
ImageList1.Masked:= FALSE;
ImageList1.Add(Bitmap,nil);
finally
Bitmap.Free;
end;
end;
Y luego cada vez que lo quisiera dibujar utilizaria esto otro:
Código Delphi
[-]
ImageList1.Draw(Canvas,0,0,5);
ImageList1.Draw(PaintBox1.Canvas,0,0,9);
Tu decides ...