Hola, no conozco ningún componente que te haga eso por lo que podrías pensar en crear una serie de botones usando algún componente en el que puedas poner una imagen y creando los que necesites en lineas y filas según el tamaño que desees que tenga la imagen.
Aunque no para esto yo he hecho algo parecido para una impresión de etiquetas en la que se crea una matriz de botones de N etiquetas por ancho x M filas y que permite picar en cualquiera de ellos, por si te sirve de ejemplo te paso el código a continuación.
Código Delphi
[-]procedure TFormPideNumEti.LLamaNumEti(var NumEti: SmallInt;Filas,Columnas,Ancho,Alto: SmallInt);
var
Left,Top,EtiLin,EtiCol,N: SmallInt;
begin
FormPideNumEti := TFormPideNumEti.Create(Application);
try
SetLength(ArrayBotones,0);
EtiLin:=0;EtiCol:=0;
Top:=50;Left:=24;
T:=Columnas*Filas;
for N := 0 to T-1 do begin
Setlength(ArrayBotones,Length(ArrayBotones)+1);
ArrayBotones[N]:=tdsFancybutton.Create(nil);
ArrayBotones[N].Name:='Boton_'+IntToStr(N);
ArrayBotones[N].Left:=Left;
ArrayBotones[N].Top:=Top;
ArrayBotones[N].Width:=Ancho;
ArrayBotones[N].Height:=Alto;
ArrayBotones[N].Parent:=FormPideNumEti;
ArrayBotones[N].Font.Size:=20;
ArrayBotones[N].Caption:=IntToStr(N+1);
ArrayBotones[N].OnClick := BotonClick;
ArrayBotones[N].Tag := N+1;
if EtiLin=Filas-1 then begin
Top:=Top+Alto;
Left:=24;
EtiLin:=0;
end else begin
EtiLin:=EtiLin+1;
Left:=Left+Ancho;
end;
end;
FormPideNumEti.ShowModal;
NumEti := FormPideNumEti.NumEti;
finally
FormPideNumEti.Destroy;
end;
end;
Saludos