Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con login y pantalla principal.. (https://www.clubdelphi.com/foros/showthread.php?t=71735)

verito_83mdq 06-01-2011 21:50:40

Problema con login y pantalla principal..
 
Buenas!! El problema que tengo es que la pantalla del login lo puese en auto-create form, una vez que se logea se crea la pantalla principal MenuForm el cual le puse fsmdiform (padre) y a partir de ahi a los form le pongo child. El problema es que como MenuForm no esta en Auto-Create no me deja abrir los form hijos tirando este error:
Cannot Create Forms. No MDI forms are currently active

Alguna ayuda?? Gracias!!

ecfisa 06-01-2011 22:03:33

Hola verito_83mdq.

Lo que se me ocurre es que saques el form del login de Auto-create forms, pongas el MDIForm, y que en el evento
OnCreate del MDIForm uses:
Código Delphi [-]
procedure MDIForm.FormCreate(Sender: TObject);
begin
  Visible:= False;
  with TLogin.Create(nil) do ShowModal;
  Visible:= True;
end;

Saludos.

verito_83mdq 06-01-2011 22:22:01

Gracias por contestar! El problema es que primero se tiene que inicializar el form del login porque me pasa variables al MenuForm (fsmdi) de que empleado ingreso al sistema y de acuerdo a eso me muestras las opciones del menu segun el sector del empleado. Se entiende??
De todos modos probe lo que me dijistes y tiro este error :

'Cannot make a visible windows modal'


Algo se tiene que poder hacer pero no se me ocurre nada..

Gracias!

ecfisa 06-01-2011 22:38:09

Hola.

El mensaje de error que te dá, es por que tenés que poner la propiedad Visible del form login en False para mostrarlo de forma modal.

Con respecto al otro tema en este [ ENLACE ] se trató como pasar variables entre forms, y de seguro hay varios más.

Saludos.

verito_83mdq 07-01-2011 02:30:37

Te sigo agradeciendo por tus ganas de ayudar, hice lo que me dijistes puse visible:=false en el login, ahora lo que hace ejcuta el programa me aparece el login cuando pongo usuario, contraseño al pulsar aceptar me vuelve a aparecer el login. Ya casi esta!! un poco mas y sale andando que podra ser?

cloayza 07-01-2011 19:15:01

Yo utilizo otra estrategia...

Código Delphi [-]
program Tu_Programa; 
            
uses         
     LoginUser;

{$R *.res}                                                                                  
Const                                                                                       
  CM_RESTORE = WM_USER + $1000;                                                             
Var                                                                                         
   AppHandle:hWnd;                                                                          
                                                                                            
begin                                                                                       
       AppHandle := FindWindow('Titulo_Formulario__Principall');
                                                                                            
     If AppHandle > 0 Then                                                                  
     Begin                                                                                  
          PostMessage(AppHandle, CM_RESTORE, 0, 0);                                         
          Exit;                                                                             
     End;                                                                                   
                                                                                            
     Application.Initialize;                                                                
     Application.Title := 'Titulo_Formulario_Principal'
                                                                                            
     Application.CreateForm(TfrmMain, frmMain);                                             
     Application.CreateForm(Tm, m);     
//Llamo a funcion Execute que esta en unidad LoginUser, la cual es la encargada de solicitar el Usuario y otros datos (Los que se te ocurran)
     if LoginUser.Execute(frmMain.Usuario) then                                                       
     Begin                                                                                  
          //Aqui  puedes programar una rutina haga algo de acuerdo a los datos ingresados Usuario.
          frmMain.Init();                                                                   
          Application.Run;                                                                  
     End                                                                                    
     else                                                                                   
     begin                                                                                  
          Application.Terminate;                                                            
     end;                                                                                   
end.

Esta es la Unit LoginUser.Pas...
Código Delphi [-]
unit LoginUser;
interface
uses                                                                                                  ...;                                                                                                          
type                                                                                                      
  TfrmLogin = Class(TForm)
    cmdLogin: TBitBtn; 
    cmdCancel: TBitBtn;
    labLogin:TLabel;    
    txtLogin: TEdit;
    labPass:TLabel;
    txtPassword: TEdit;
    procedure txtLoginExit(Sender: TObject);
    procedure txtLoginEnter(Sender: TObject);                                                             
    procedure cmdLoginClick(Sender: TObject);                                                             
    procedure txtLoginChange(Sender: TObject);                                                            
    procedure FormDestroy(Sender: TObject);                                                               
private                                                                                                 
    { Private declarations }                                                                              
     Procedure   public                                                                                                  
    { Public declarations }                                                                               
      end;                                                                                                  

function Executer(Var Usuario:String): Boolean;                                   
  
Var
frmLogin:TfrmLogin;                                                                                
implementation
Uses Main                                                                              
{$R *.dfm}     
  
function Execute(Usuario:String): Boolean;                                   
begin
     //Crea formulario de Login
     With TfrmLogin.Create(Application) Do
     Begin
          ShowModal;    
          Result:=ModalResult=mrOk;   
          if Result Then
            //Si presiona Ok...asigna el de txtLogin ingresado a la variable Usuario...
            Usuario:=txtLogin.Text;   
         Free;
    End;
End;

Ojala te aclare algo...

Saludos

verito_83mdq 08-01-2011 00:38:33

Me anduvo!!! Me sirvio el código que me pusistes, la verdad gracias por tomarte la molestia.
Les quiero agradecer a ambos ecfisa y cloayza.
Muchas Gracias por todo!!


La franja horaria es GMT +2. Ahora son las 19:55:22.

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