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;