Вы можете использовать приведение Sender в качестве tButton, а затем запросить его верхнюю и левую, например:
Procedure TForm1.OnClick(Sender:tObject);
var
X,Y : Integer;
begin
if Sender is TButton then
begin
X := TButton(Sender).Top;
Y := TButton(Sender).Left;
// do something with X & Y
end;
end;
Или, если вы просто хотите узнать, какая кнопка была нажата, вы также можете использовать свойство TAG, чтобы вставить число в каждую кнопку, а затем получить значение тега в событии onclick. Просто не забудьте сначала установить свойство Tag на что-то. Это можно сделать в конструкторе форм, если вы просто перетаскиваете кнопки на панель сетки или в процедуру, которую вы используете для создания и вставки кнопок.
Procedure TForm1.OnClick(Sender:tObject);
var
iButton : integer;
begin
if Sender is TComponent then
begin
iButton := TComponent(Sender).Tag;
// do something with iButton
end;
end;
Вы также можете использовать свойство tag для хранения не только целого числа, так как указатель в настоящее время использует тот же размер памяти, что и целое число, вы можете привести указатель к целому числу и вставить это значение в свойство tag. Просто помните, что любой указатель, который вы помещаете в это поле, по-прежнему рассматривается как целое число. Вы несете ответственность за память, на которую он указывает, компонент не будет управляться.