Als Key macht es eher Sinn, den Namen der Controls zu verwenden, als den aktuellen Text. Als grober Anhaltspunkt:
Code:
for i := 0 to Pred(Form.ComponentCount) do begin
if (Form.Components[i] is TControl) then begin
if (Form.Components[i] as TControl).Parent = Form then begin
ReadControl(Form.Name, (Form.Components[i] as TControl), i);
end;
end else if (Form.Components[i] is TMenu) then begin
ReadMenuItem(Form.Name + '.' + (Form.Components[i] as TMenu).Name, (Form.Components[i] as TMenu).Items);
end else if (Form.Components[i] is TActionList) then begin
ReadAction(Form.Name + '.' + (Form.Components[i] as TActionList).Name, (Form.Components[i] as TActionList));
end;
end;
ReadControl muss dann, falls es ein TWinControl ist, über dessen ControlCount wieder alle seine Controls durchgehen.
Wenn die Controls alle ordentlich und sinnvoll benannt sind, ist das genauso anwenderfreundlich; aber ob Du in den einzelnen Untermethoden nun .Caption/.Text oder .Name als Key verwendest, ist ja nur ein winziger Unterschied.