Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Que estoy haciendo mal (https://www.clubdelphi.com/foros/showthread.php?t=73910)

José Luis Garcí 24-05-2011 12:56:40

Que estoy haciendo mal
 
Hola compañeros, como siempre rrecurro a vosotros ya que llevo un día perdido por culpa de la siguiente funcion

Código Delphi [-]
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;

La llmada la hago de la siguiente manera

Código Delphi [-]
AbrirForms(TFFamilias,A_AFamilias,1,'Familias');

La funcion Compruebanivel es

Código Delphi [-]
//------------------------------------------------------------------------------
//******************************************************[ 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;

y el prollecto ya he probado con
Código Delphi [-]
  Application.CreateForm(TFFamilias, FFamilias);
y con

Código Delphi [-]
//  Application.CreateForm(TFFamilias, FFamilias);

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

Código Delphi [-]
      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');


Se supone que al leer la variable modulo, deberia desirme si esta asignada o no, pero ni idea.

José Luis Garcí 24-05-2011 13:06:58

Se me olvido Comentar si pongo el código que uso normalmente funcion, os pongo el código

Código Delphi [-]
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;

ecfisa 24-05-2011 14:24:35

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
 // Action3 (Tag:2) da error nivel requerido, con Action1(Tag:0) muestra FFamilias correctamente
  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.

José Luis Garcí 24-05-2011 15:40:11

Gracias, Muchas gracias Ecfisa, funciono perfectamente, siento que el código sea un poco lioso, te debo una caña, cuando quiera pasa por la taberna que esta paga.:D:D:D

ecfisa 24-05-2011 15:43:23

Cita:

Empezado por José Luis Garcí (Mensaje 401116)
Gracias, Muchas gracias Ecfisa, funciono perfectamente, siento que el código sea un poco lioso, te debo una caña, cuando quiera pasa por la taberna que esta paga.:D:D:D

Quedamos así, en un rato nos encontramos para disfrutar la cañita... :D

Saludos.

Casimiro Noteví 24-05-2011 18:20:59

Vamos a ver, vamos a ver... esos títulos, esos títulos ;) ;) ;)

José Luis Garcí 24-05-2011 18:45:58

Culpa Mía, mi intención era llamarlo que estoy haciendo mal en esta función, eso después de desechar, títulos como

Maldita Función
Hija de su madre
y mi preferida, el Demonio te lleve,:D:D:D:D:D


La franja horaria es GMT +2. Ahora son las 06:05:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi