Hola.
Añade TAG's al código para que se lea mejor.
El problema es que esos dos códigos no son equivalentes, ya que en el segundo:
Código Delphi
[-]
TAction(MnCuentas).Execute;
MnCuentas no es el nombre del componente, sino el componente en sí.
Vamos por partes (como dijo Jack el destripador...)
Coloca el siguiente código:
Código Delphi
[-]
var
Str:string;
comp:TComponent;
begin
Str := FUsuarios.QMenuNombreObjeto.Value;
MessageDlg('Nombre la la Action: ' + Str, mtInformation, [mbOK], 0);
Str := FUsuarios.QMenuNombreObjeto.AsString;
MessageDlg('Nombre la la Action (string): ' + Str, mtInformation, [mbOK], 0);
comp := FindComponent(Str);
if Assigned(Comp) then begin
MessageDlg('Encontrado el componente: ' + Str, mtInformation, [mbOK], 0);
if (comp is TAction) then begin
TAction(comp).Execute;
end;
end
else begin
MessageDlg('No encontrado el componente: ' + Str, mtWarning, [mbOK], 0);
end;
Ejecútalo, paso a paso, si hace falta y dinos qué mensajes te salen...