Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Formlulario Login/Pass y Form Principal (https://www.clubdelphi.com/foros/showthread.php?t=75324)

mantraxer21 13-08-2011 22:45:21

Formlulario Login/Pass y Form Principal
 
Estimados:

Tengo una muy pequeña aplicación, para poder hacer funcionar Login y Clave y luego de ello que se vaya al Formulario Principal.

Realidad:

FormLogin (fsNormal)
FormPrincipal (fsMDIForm)

Código del Boton Ingresar del Formulario LOGIN

Código Delphi [-]
procedure TForm1.IngresarClick(Sender: TObject);
var form : TMainForm;
begin

qLogin.close;
qlogin.ParamByName('txtlogin').AsString:=Login.Text;
qlogin.ParamByName('txtclave').AsString:=Clave.Text;
//Validaciones.Validate;

qlogin.Open;
if qlogin.Eof then begin
  MessageDlg('Usuario incorrecto, vuelva a intentarlo.',mtError,[mbOk],0);
    exit;
end;
FormPrincipal.Tag:=1;
  self.Hide;
       FormPrincipal.StatusBar1.Panels[1].text:=qLoginNOMBRE_COMPLETO.text;
       Application.MessageBox( 'Bienvenido al Sistema',
  MB_ICONINFORMATION );
    Application.CreateForm(TFormPrincipal, FormPrincipal);
    FormPrincipal.Tag:=0;
    Principal.FormPrincipal.show;

En la última línea invoca al formulario Principal, el tema está todo bien, pero en el Formulario Principal, en un botón que llama a un "Formulario Hijo", da un error diciendo que no está activo.

Alguien puede ayudar con esto ???:(:(

Saludos Cordiales

ecfisa 14-08-2011 00:08:00

Hola mantraxer21.

Correcto. Pero ayudaría más si pusieras la llamada al form hijo y el código mediante el cuál lo mostras.

Un saludo.

mantraxer21 14-08-2011 02:01:19

Hola, gracias por responder....

Por ejemplo un boton está programado asi.

Código Delphi [-]
procedure TFormPrincipal.GraficoClick(Sender: TObject);
Var FormGrafico :TFormGraficoAgenda;
begin

  FormGrafico :=TFormGraficoAgenda.Create(Self);
  FormGrafico.Show;

:o

ecfisa 14-08-2011 10:04:05

Hola mantraxer21.

Lo siento, he intentado entender la lógica de la apertura de los forms basándome en tu código y no lo logro. No puedo enteder el papel que juegan Form1, MainForm y Principal.

Es decir, TFormPrincipal es el MDIForm y TFormGraficoAgenda es el MDIChild. ¿ Pero que son Form1, MainForm y Principal ?


Un saludo.

mantraxer21 15-08-2011 04:00:47

Hola Gracias

El Form1 = Formulario de Login
El MainForm y FormPrincipal = FormPrincipal

La equivocación era por el cambio de código...

Form1 = Login
FormPrincipal = Formulario Principal de Opciones del Sistema
FormGraficoAgenda = Formulario que permite graficar las tenciones agendadas.

Esos participan...

ecfisa 15-08-2011 16:50:12

Hola mantraxer21.

Entonces si no entiendo mál tenes:
  • Form1 : fsNormal
  • FormPrincipal: fsMDIForm
  • FormGraficoAgenda: fsMDIChild

Lo que hay que tener en claro que en una aplicación MDI, la ventana principal siempre debe ser un MDIForm.
Y si la primera ventana que se crea en tu aplicación es Form1 (es decir que es la ventana principal), no va a funcionar.

Una solución es abrir tu proyecto y organizarlo así:
Código Delphi [-]
begin
  Application.Initialize;
  Application.CreateForm(TFormPrincipal, FormPrincipal); // Crear MDIForm
  Application.FormPrincipal:= False;                     // Ocultar MDIForm
  Application.CreateForm(TForm1, Form1);                 // Crear login
  Form1.ShowModal;                                       // Mostrar login
  Application.ShowMainForm:= True;                       // Mostrar MDIForm 
  Application.Run;
end;

En este enlace vas a encontrar información útil sobre la creación de aplicaciones MDI.

Un saludo.

mantraxer21 15-08-2011 17:52:05

Gracias...

Revisé el orden que me enviaste, pero la línea de ocultar el FormPrincipal no me permite crearlo...

Dice.

Código Delphi [-]
'TApplication' does not contain a member named 'FormPrincipal'

La estructura es así en mi aplicación !

Código Delphi [-]
program APlicacionMDI;

uses
  Forms,
  Login in 'Login.pas' {FormLogin},
  AccesoDatos in 'AccesoDatos.pas' {dm: TDataModule},
  Pacientes in 'Pacientes.pas' {FormPacientes},
  Principal in 'Principal.pas' {FormPrincipal},
  Agenda in 'Agenda.pas' {FormAgenda},
  visitamedica in 'visitamedica.pas' {FormVisitaMEdica},
  Creditos in 'Creditos.pas' {FormCreditos},
  Diagnosticos in 'Diagnosticos.pas' {FormDiagnostico},
  GraficoAgenda in 'GraficoAgenda.pas' {FormGraficoAgenda};

{$R *.res}

begin
  Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(Tdm, dm);//DataModule1
 Application.CreateForm(Tdm2, dm2);//DataModule2
 Application.CreateForm(TFormPrincipal, FormPrincipal);
 Application.FormPrincipal:=false; // aca da error !!!!
 Application.CreateForm(TFormLogin, FormLogin);
 FormLogin.ShowModal;
 Application.ShowMainForm:=true;
Application.Run;
end.

ecfisa 15-08-2011 18:30:22

Hola mantraxer21.

Mis disculpas, fue una confusión al ir escribiendo el código. Cambiá la línea que te dá error por:
Código Delphi [-]
  Application.ShowMainForm:= False;
Fijate que en Auto-create forms, Form1 esté después de FormPrincipal.

Saludos.

mantraxer21 16-08-2011 03:24:16

Sorry, por no escribir antes, efectivamente habia cambiado esa linea de código por la que mensionas, el tema es que ahora en la apliación (FormPrincipal - FormStyle: fsMDIForm) invoco a un Form-Hijo llamado "FormGrafico" (fsMDIForm), pero sólo hace un pequeño pestañeo, creo que está trabajando en segundo plano, capaz de ser visto por mi o visualmente para cualquiera.

Código Delphi [-]

procedure TFormPrincipal.GraficoClick(Sender: TObject);
Var FormGrafico :TFormGraficoAgenda;
begin
 
FormGrafico := TFormGraficoAgenda.Create(Application);
FormGrafico.Show;
end;

El programa NO se cae, ni muestra errores en la consola de mensajes.

Sólo hace que trabaja con un pestañeo en el FormPrincipal, donde estoy llamando al FormHijo !


Gracias

ReiCk_Z 26-08-2011 20:08:37

mantraxer21, en mí caso para evitar ese pestañeo de la form (que para mí es molesto) es lo siguiente:

Código Delphi [-]
begin     
 Application.Initialize;      
 Application.CreateForm(TFormPrincipal, FormPrincipal); // Crear MDIForm     
 Application.ShowMainForm:= False;                             // Ocultar MDIForm     
 Application.CreateForm(TForm1, Form1);                     // Crear login     
 Form1.ShowModal;                                                     // Mostrar login   
 //Application.ShowMainForm:= True;   (Omito esta línea)     
 Application.Run;   
end;

y pongo la form principal en su propiedad visible en false;

después de validar si la clave es correcta entonces cierro la form donde me pide la clave y visualizo la form principal asi:

Código Delphi [-]
FClave.close;
Application.ShowMainForm:= True;        // Mostrar MDIForm

En case de que apliques mi sugerencia, dime si te funciono.

mantraxer21 29-08-2011 00:06:19

Cerrado OK
 
Muchas gracias por tu respuesta, efectivamente funcionó a la perfección dichas instrucciones y ya no tengo problemas con el login y Pass.

Muchas gracias

Saludos Cordiales

:rolleyes::rolleyes:

DSK25 12-10-2012 02:11:26

Cita:

Empezado por ecfisa (Mensaje 409453)
Hola mantraxer21.

Entonces si no entiendo mál tenes:
  • Form1 : fsNormal
  • FormPrincipal: fsMDIForm
  • FormGraficoAgenda: fsMDIChild
Lo que hay que tener en claro que en una aplicación MDI, la ventana principal siempre debe ser un MDIForm.
Y si la primera ventana que se crea en tu aplicación es Form1 (es decir que es la ventana principal), no va a funcionar.

Una solución es abrir tu proyecto y organizarlo así:
Código Delphi [-]begin Application.Initialize; Application.CreateForm(TFormPrincipal, FormPrincipal); // Crear MDIForm Application.FormPrincipal:= False; // Ocultar MDIForm Application.CreateForm(TForm1, Form1); // Crear login Form1.ShowModal; // Mostrar login Application.ShowMainForm:= True; // Mostrar MDIForm Application.Run; end;


En este enlace vas a encontrar información útil sobre la creación de aplicaciones MDI.

Un saludo.

Se que llego un año tarde, pero ese código donde iría si uso C++ Builder? :)

escafandra 12-10-2012 08:45:35

Es este hilo puedes encontrar lo que buscas.

Saludos.

DSK25 14-10-2012 02:20:43

He visto el tema y he probado lo que esta ahi, pero al compilar me manda el error "Access violation at adress...", y luego aparace el Login y el formulario principal, como hago para que aparezca solo el login al inicio.

Código:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  Application->Initialize();
  Application->CreateForm(TfrmPrincipal, frmPrincipal);
  Application->ShowMainForm = false;                     
  Application->CreateForm(TfrmLogin, frmLogin);         
  frmLogin->ShowModal();                                 
  Application->ShowMainForm = true;                 
  Application->Run();
}


escafandra 14-10-2012 02:26:17

Si miraste la propuesta de abajo, verás que no se puede ejecutar el formularo principal hasta no identificarse correctamente:

Cita:

Empezado por escafandra (Mensaje 399775)
Código:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  try
  {
      Application->Initialize();

      TLogin *Log = new TLogin(0);
      if(Log->ShowModal() == mrOk)
          Application->CreateForm(__classid(TForm1), &Form1);
      delete Log;
      Application->Run();
  }
//.................................................................

Si la salida del Log->ShowModal el mrOk el programa continua, si no, se termina. TLogin se encargará de gestionar si el usuario se autentificó de forma correcta y en ese caso devolverá mrOK.
Código:

void __fastcall TLogin::Button1Click(TObject *Sender)
{
  if(Edit1->Text == "1234")
    ModalResult = mrOk;
  else
    ModalResult = mrCancel;
}



Saludos.


La franja horaria es GMT +2. Ahora son las 02:22:12.

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