Was wäre denn besser geeignet?
Eine Bitmap, bzw. eine Image oder Paint oder Formular. Einfach ein normales Feld in das man zeichnen kann.
Mal auf die Schnelle. Du benötigst eine Image Komponente. In OnMouseDown fragst du ab welches Feld geklickt wurde.
Delphi-Quellcode:
const
MaxX = 20;
MaxY = 20;
CellWidth = 15;
CellHeigth = 15;
LineWidth = 1;
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: Integer;
begin
with Image1.Picture do
begin
Bitmap.Width := (MaxX * (CellWidth + LineWidth)) + LineWidth;
Bitmap.Height := (MaxY * (CellHeigth + LineWidth)) + LineWidth;
for x := 0 to MaxX do
begin
Bitmap.Canvas.MoveTo(x * (CellWidth + LineWidth ), 0);
Bitmap.Canvas.LineTo(x * (CellWidth + LineWidth ), Bitmap.Height);
end;
for y := 0 to MaxY do
begin
Bitmap.Canvas.MoveTo(0, y * (CellHeigth + LineWidth ));
Bitmap.Canvas.LineTo(Bitmap.Width , y * (CellHeigth + LineWidth ));
end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
c, r: Integer;
begin
c := X div (CellWidth + LineWidth );
r := Y div (CellHeigth + LineWidth );
//Falls über das MaxX oder MaxY geklickt: -1
if c > (MaxX - 1) then
c := -1;
if r > (MaxY - 1) then
r := -1;
Caption := Format('Feld geklickt: x = %d; y = %d', [c, r]);
end;