Hola:
Puedes hacer varias cosas, como asignar el nombre del botón, nada más crearlo, o bien asignarle a su propiedad
tag (que para este tipo de trucos está), el número de botón:
Código:
var
boton : Array [0..x valor] of TBooton;
n : Integer;
begin
n := n+1;
Boton[n] := TButton.create;
Boton[n].parent := Self
Boton[n].onclick := otro procedimiento;
// esto puede ser peligroso si ya hay otro con el mismo nombre
// aunque normalmente Delphi omite la T inicial del nombre
// de la clase y en nuestro caso la dejamos tal cual
Boton[n].Name := TButton.ClassName + IntToStr(n);
// este truco es mejor, y más inmediato para identificarlo luego
Boton[n].Tag := n + 1; // para que numere a partir de 1
end;
// cuando se hace click a un botón, si hemos usado Tag
procedure OtroProcedimiento (Sender: TObject);
begin
Case TButton(Sender).Tag of
1 : HazEsto;
2 : HazLoOtro;
...
end;
end;
ó bien
// cuando se hace click a un botón, si hemos usado Name
procedure OtroProcedimiento (Sender: TObject);
var
s : String;
N : Integer;
begin
s := TButton(Sender).Name; // Ej: s = 'TButton12'
Delete (s, 1, Length(TButton.ClassName)); // Ej: s = '12'
N := StrToInt(s); // Ej: N = 12
Case N of
0 : HazEsto;
1 : HazLoOtro;
...
end;
end;
Yo usaría la propiedad
tag; lo de numerarla a partir de 1 es porque todos los componentes tienen tag = 0 por defecto, así lo diferenciamos, aunque es más bien una manía seguramente innecesaria, supongo que sólo los botones que crees en tiempo de ejecución accederán a ese procedimiento.