Ver la Versión Completa : Formlulario Login/Pass y Form Principal
mantraxer21
13-08-2011, 22:45:21
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
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.
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í:
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 (http://www.infonegocio.com/tudela2/delphiladero/docs/mdi/mdi1.htm) 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.
'TApplication' does not contain a member named 'FormPrincipal'
La estructura es así en mi aplicación !
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:
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.
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:
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:
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
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
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 [-] (http://www.clubdelphi.com/foros/#)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 (http://www.infonegocio.com/tudela2/delphiladero/docs/mdi/mdi1.htm) 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 (www.clubdelphi.com/foros/showthread.php?t=73718) 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.
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:
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.
void __fastcall TLogin::Button1Click(TObject *Sender)
{
if(Edit1->Text == "1234")
ModalResult = mrOk;
else
ModalResult = mrCancel;
}
Saludos.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.