Hola José Luis.
Hice unos pequeños cambios y funciona sin errores y respetando los niveles de acceso. Te pongo las modificaciones junto con mis disculpas por recortar el código, pero fué a fín de simplificarme la lectura.
Esta fué la prueba:
Código Delphi
[-]
...
procedure TFMenuPrincipal.FormCreate(Sender: TObject);
begin
VarNivelUsuario:= 0;
end;
function CompruebaNivel(Tag, Nivel:Integer):Boolean;
begin
Result := Tag <= Nivel;
end;
function TFMenuPrincipal.AbrirForms(AClass:TFormClass; NivelAcceso:TAction;
ModoAbrir:Integer; NomModulo:string):Boolean;
var
Modulo:TForm;
begin
if CompruebaNivel(NivelAcceso.Tag, VarNivelUsuario) then
begin
try
Modulo:= Application.FindComponent(Copy(AClass.ClassName, 2, MaxInt)) as TForm;
if not Assigned(Modulo) then
begin
Modulo:= AClass.Create(nil);
if ModoAbrir = 1 then
Modulo.ShowModal
else
Modulo.show;
end
else
begin
if ModoAbrir = 1 then
Modulo.ShowModal
else
Modulo.show;
end;
Result:=True;
except
ShowMessage('error '+NomModulo);
Result:=False;
end;
end
else
begin
ShowMessage('Usuario con nivel '+IntToStr(NivelAcceso.Tag)+' requerido');
Result:=False;
end;
end;
procedure TFMenuPrincipal.ActionExecute(Sender: TObject);
begin
if CompruebaNivel(FFamilias.Tag, VarNivelUsuario)=true then
begin
try
if not Assigned(FFamilias) then
begin
FFamilias:= TFFamilias.Create(nil);
FFamilias.ShowModal;
end
else
FFamilias.ShowModal;
except
ShowMessage('error al abrir el modulo');
end;
end
else
begin
ShowMessage('Usuario con nivel '+IntToStr(FFamilias.Tag)+' requerido');
end;
end;
procedure TFMenuPrincipal.Button1Click(Sender: TObject);
begin
AbrirForms(TFFamilias, Action3, 1 , 'Familias');
end;
end.
De todas maneras vas a tener que probarlo bién, ya que como decimos aca "en la cancha se ven los pingos (caballos)"
Saludos.