[pre]function TFMenuPrincipal.AbrirForms(Unidad:TClass;NivelAcceso:TAction;ModoAbrir:Integer;NomModulo:string):Boo lean; //------------------------------------------------------------------------------ //****************************************[ Funcion para Abrir Los Form ]******* // ----------------------------------------------------------------------------- //Unidad: Nombre del Form a abrir //NivelAcceso: Segun La Propiedad TAG de la action nos permite pasar o no //ModoAbrir: Abre el Form 1 En Showmodal 0 en Show //NomModulo: Nombre del modulo para mensajes de error //------------------------------------------------------------------------------ var Modulo:TForm; Modf:string; begin if CompruebaNivel(NivelAcceso.Tag,VarNivelUsusario)=true then begin try Modf:= Copy(Unidad.ClassName,2,Length(Unidad.ClassName)); Modulo:=tform(Modf); if not Assigned(&Modulo) then begin Modulo:=TForm(Unidad).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('Se ha producido un error al intentar abrir el modulo [ '+NomModulo +' ]'+#13 +#13+#13+#13+ 'Si persiste el Error, por favor pongase en contacto con el servicio Técnico'); Result:=False; end; end else begin ShowMessage('Debe se un usuario con nivel '+IntToStr(NivelAcceso.Tag)+' para entrar en esta opción'); Result:=False; end; end;[/pre]
La llmada la hago de la siguiente manera
[pre]AbrirForms(TFFamilias,A_AFamilias,1,'Familias');[/pre]
La funcion Compruebanivel es
[pre]//------------------------------------------------------------------------------ //******************************************************[ CompruebaNivel ]****** // 16/02/2011 JLGT compara un nivel con otro si es igual o mayo devuelve true //------------------------------------------------------------------------------ // En pricipio para comprobar niveles de ususario segun el tag y un nivel dado //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ function CompruebaNivel(tag, nivel:Integer):Boolean; begin if tag<=nivel then Result:=True else Result:=False; end;[/pre]
y el proyecto ya he probado con
y el prollecto ya he probado con
y con
[pre]// Application.CreateForm(TFFamilias, FFamilias);[/pre]
El problema que detecto es que cunado pasa por la unidad de asignación no entra, pasa por lo tanto al else y aún asi me da el error de las lineas
[pre] ShowMessage('Se ha producido un error al intentar abrir el modulo [ '+NomModulo +' ]'+#13 +#13+#13+#13+ 'Si persiste el Error, por favor pongase en contacto con el servicio Tecnico');[/pre]
Se supone que al leer la variable modulo, deberia desirme si esta asignada o no, pero ni idea, si pongo el código que uso normalmente funciona, os pongo el código
[pre]procedure TFMenuPrincipal.A_AFamiliasExecute(Sender: TObject); //------------------------------------------------------------------------------ //*************************************************[ LLAMADA A FAMILIAS ]******* //------------------------------------------------------------------------------ begin if CompruebaNivel(A_AFamilias.Tag,VarNivelUsusario)=true then begin try if not Assigned(FFamilias) then begin FFamilias:=TFFamilias.Create(nil); FFamilias.ShowModal; end else FFamilias.ShowModal; except ShowMessage('Se ha producido un error al intentar abrir el modulo [ Familias ]'+#13 +#13+#13+#13+ 'Si persiste el Error, por favor pongase en contacto con el servicio Técnico'); end; end else begin ShowMessage('Debe se un usuario con nivel '+IntToStr(A_AFamilias.Tag)+' para entrar en esta opción'); end; end;[/pre]