Das geht über die sogenannten Tags.
Die Property Tag enthält eine 32-bit-Zahl, in der Du weitere Informationen codieren kannst. Beispielsweise könntest Du definieren:
100 - 199 für Edit
200 - 299 für Checkboxen
etc.
und dann den Index folgendermaßen ermitteln:
if (TComponent(Sender.Tag) DIV 100) = 1 then Index := TComponent(Sender.Tag) MOD 100;
// falls Du einfach nur die Component übergeben bekommst und den Typ nicht weisst...
Natürlich musst Du die Tags eigenständig vergeben, wobei Du einfach in Form.Create über Components läufst:
const
KIEditBeginn = 100;
KIChkBoxBeginn = 200;
procedure TForm1.FormCreate(Sender: TObject);
var
i, EditIndex, CheckboxIndex : LongInt;
Comp : TComponent;
begin
EditIndex := KIEditBeginn;
CheckboxIndex := KIChkBoxBeginn;
for i := 0 to Form1.ComponentCount-1 do begin;
Comp := TComponent(Components);
if (Components IS TEdit) then begin;
Comp.Tag := EditIndex;
INC(EditIndex);
end else { if Components IS TEdit }
if (Components IS TCheckbox) then begin;
Comp.Tag := CheckboxIndex;
INC(CheckboxIndex);
end; { if Components IS TEdit }
ShowMessage('Control '+Comp.Name+' hat Nummer '+IntToStr(Comp.Tag));
end; { for i := 0 to Form1.ComponentCount-1 }
end; { proc FormCreate }
Anschließend baust Du Dir einen Eventhandler für jede Komponente, wobei ich statt "OnClick" eher "OnEnter" wählen würde.
Du markierst im Form eine Komponente (z.B. ein Editfeld), gehst in den Objektinspektor und klickst doppelt auf das Ereignis "OnEnter".
Daraufhin erstellt Delphi einen leeren Eventhandler, den Du z.B. in "AllEditEnter" umbenennst und folgendermaßen mit Leben füllst:
procedure TForm1.AllEditEnter(Sender: TObject);
var
Index : LongInt;
begin
if (TComponent(Sender).Tag DIV KIEditBeginn) = 1 then begin;
// Abfrage nur aus Sicherheitsgründen, um sicherzustellen, dass Tag richtig
// gesetzt wurde.
Index := TComponent(Sender).Tag MOD KIEditBeginn;
ShowMessage('Komponente ist ein TEdit mit dem Namen '+TComponent(Sender).Name+
' und dem Index '+IntToStr(Index));
end; { if (TComponent(Sender).Tag DIV KIEditBeginn) = 1 }
end; { proc AllEditEnter }
Diese Prozedur definierst Du als Eventhandler für alle Editfelder des Forms, wofür Du einfach jedes Editfeld markierst, in den Objektinspektor wechselst und aus der Dropdownliste "AllEditEnter" auswählst.
Für die anderen Controls gilt das Gleiche.