Title: Get component index at runtime
Use IndexInParent function:
procedure TForm1.Button3Click(Sender: TObject);
begin
 MessageBox(
 Handle, 
 PChar('Index = '+IntToStr(IndexInParent(Button3))),
 'Information', 
 MB_OK);
end;
function TForm1.IndexInParent(VControl: TControl): Integer;
var
 ParentControl: TWinControl;
begin
 ParentControl:=TForm(VControl.Parent);
 if (ParentControl<>nil) then
 for Result:=0 to ParentControl.ControlCount-1 do
 if (ParentControl.Controls[Result]=VControl) then
 Exit;
 Result:=-1;
end;