Hola de nuevo, solo unas pequeñas observaciones sobre el codigo del amiguito coso. Si recorremos los componentes de Application, lo que obtenemos son los fomularios y no los componentes del formulario actual, y en esta parte "Application.Components[i].Enabled" falta un Cast.
El codigo quedaría así:
Código Delphi
[-]
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TMenuItem) then
TMenuItem(Components[i]).Enabled := StrToInt(Edit1.Text) < 2;
end;
Pero con la condición o te habilita todos o te deshabilita todos.
Lo que se me ocurre, sino es solo un MenuItem el que tienes que deshabilitar según el nivel de usurio, es que utilices la propiedad Tag de cada MenuItem, por ejemplo tenemos esto.
Código:
Opcion1(0) Opcion2(1) Opcion3(2)
Opcion11(1) Opcion21(1) Opcion31(2)
Opcion12(2) Opcion22(1)
Opcion13(2)
donde el numero entre corchetes sería el numero de Tag que le estarías dando a tu MenuItem, que pueden presentar 3 opciones, en la primera columna la Opcion11 pertenece al nivel 1 la Opcion21 y Opcion22 pertenecen al nivel 2, como se tiene tanto del nivel 1 como del nivel 2 entonces le ponemos al principal con Tag 0, y en las otras opciones como todo pertenece tanto al nivel 1 como al nivel 2 en el principal le ponemos su correspndiente nivel. Talvez no se entiende lo que trato de decir, conste que no soy buena para explicar.
El codigo quedaría así.
Código Delphi
[-]
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TMenuItem) then
begin
if (TMenuItem(Components[i]).Tag=StrToInt(nivel)) or (TMenuItem(Components[i]).Tag=0) then
TMenuItem(Components[i]).Visible := True
else
TMenuItem(Components[i]).Visible := False;
end;
ejemplo
end;
Utilizo Visible, porque creo que sería mejor no mostrale la opción si no tiene acceso a la misma.
Saluditos