Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error al llamar a un form hija (https://www.clubdelphi.com/foros/showthread.php?t=74079)

Thoma 29-05-2011 22:20:26

Error al llamar a un form hija
 
Tengo un pequeño problema, me explico, tengo un form1 principal con los clasicos edit de "usuario", "pasword", etc... desde form1 llamo a otro form2 con la propiedad fsMDIForm que me va a servir de formulario padre, y dentro de este tengo un boton para llamar a una ventana hija, con el siguiente codigo:
Código Delphi [-]
  if Form3=nil then begin
    Form3:=TForm3.Create(Self);
    Form3.FormStyle:=fsMDIChild;
  end;
  Form3.Show;
Cuando pulso el boton para abrir el form3 me aparece el siguiente error:
Message : Cannot create form. No MDI forms are currently active.
Alguien me puede decir que tengo mal.
un saludo.

espero haber publicado el hilo en el lugar correcto.

Diego666 29-05-2011 22:40:56

Tal vez esto te Sirva ..

Código Delphi [-]
 var
 Forma: TPasswordDlg;
 begin
  Forma := TPasswordDlg.Create(Forma);
   Forma.Caption := 'Validar Contrasenas';
        Forma.FormStyle:=fsMDIForm;
        Forma.ShowModal;
        Regresaconecion:=Forma.TerminalLocal.Text;
 end;

Saludos !!

Thoma 29-05-2011 23:06:13

Diego666; te agradezco tu respuesta, pero no acabo de entenderla.
el Form2 (formulario Padre)
Código Delphi [-]
  Form2:=TForm2.Create(Application);
  Form2.ShowModal;
me lo crea correctamente, el problema lo tengo cuando desde el Form2 intento crear el Form3 que es un formulario hija.

ecfisa 30-05-2011 01:02:32

Hola Thoma.

Revisá este [ enlace ], ahí se explica lo que te está sucediendo.

Saludos.

Thoma 30-05-2011 08:32:48

Gracias ecfisa, el tema me ha quedado claro.
[FONT='Calibri','sans-serif']Entonces según esto, el Form1 siempre tiene que ser el “padre”; ahora bien, ¿cómo puedo hacer para que antes de visualizar el Form1 (padre), me abra el Form2 (para pedir el usuario) y si es correcto entonces pasar a visualizar el Form1 y si no es correcto cerrar la aplicación?[/font]

Thoma 30-05-2011 09:06:52

Bueno, creo que he encontrado la solución.
He puesto en el evento “onShow” (antes de que el formulario se haga visible) del formulario padre la apertura del formulario “Usuario”.

ecfisa 30-05-2011 09:15:19

Hola Thoma.

Me alegro que lo hayas resuelto, otra posibilidad es poner en tu poyecto:
Código Delphi [-]
begin
  Application.Initialize;
  Application.CreateForm(TMDIForm, MDIForm);
  Application.ShowMainForm:= False;
  Application.CreateForm(TFrmPassword, FrmPassword);
  FrmPassword.ShowModal;
  Application.ShowMainForm:= True;
  Application.Run;
end;
Donde MDIForm es tu form MDI principal y FrmPassword es el form donde se ingresa usuario y contraseña.

Saludos.

Thoma 03-06-2011 15:18:25

Gracias ecfisa, he probado de la manera que me indicas y me funciona a la perfección. Pero mi duda ahora es la siguiente: ¿como puedo controlar si tengo que abrir la ventana padre o no?.
Me explico, si en la ventana "passord" se pulsa "Esc" o si cerramos la ventana sin introducir datos no se deberia de abri el Formulario padre.
Luego otra duda que me surge, es ¿donde declaro las variables para que me sirvan para todos los furmularios?

ecfisa 03-06-2011 16:42:17

Hola Thoma.

Cita:

¿como puedo controlar si tengo que abrir la ventana padre o no?.
Podes aprovechar a TModalResult que representa el valor que devuelve una ventana modal y hacer algo como:
Código Delphi [-]
uses Forms, 
     Controls,
     ....
begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.ShowMainForm:= False;
  with TfrmPassword.Create(nil) do
  try
    if ShowModal = mrOk then
    begin
      Application.ShowMainForm:= True;
      Application.Run;
    end;
  finally
    Free;
  end;
end.
Por ejemplo devolver mrOk solo sí ingresa correctamente el usuario y contraseña. Revisá todos los valores que puede tomar TModalResult en la ayuda de Delphi.

Saludos.

Thoma 13-06-2011 13:21:00

a ver... no sé porque me ocurre lo siguiente. Si pulso la tecla "Enter" en cualquier edit, automáticamente me abre el form Padre sin pasar por el siguiente edit, pero si pulso la tecla "Tab" si toma el foco el siguiente edit. De hecho con el "enter" no pasa ni por el "onExit"
¿?
con lo cual no puedo controlar el ModalResult.

ecfisa 13-06-2011 13:57:35

Hola Thoma.

¿ Tenés asignado algún código en los eventos OnKeyPress u OnKeyDown de los Edits o el Form ?

Saludos.

Thoma 13-06-2011 14:46:53

He probado con esto,
Código Delphi [-]
procedure TPasswordDlg.edtUsuarioKeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then edtPassword.SetFocus;

end;
pero ya te digo no pasa ni por keyPress

ecfisa 13-06-2011 16:22:21

Hola Thoma.

Si estas usando TBitBtns para aceptar y cancelar, poné el valor False en su propiedad Default.

Debido a que esta propiedad determina si el manejador del evento OnClick del TBitBtn se activa o no al presionar la tecla enter

Saludos.

Thoma 13-06-2011 21:47:23

Gracias edfica, tu ayuda me ha servido de mucho.
un saludo.

Diego827 14-10-2011 23:35:25

Exacto!
 
Cita:

Empezado por ecfisa (Mensaje 401779)
Hola Thoma.

Revisá este [ enlace ], ahí se explica lo que te está sucediendo.

Saludos.

Estimado ecfisa; tienes toda la razón. Tengo un formulario padre y me error al llamar al hijo. Y si en definitiva debe ser el form principal el formulario padre.

Saludos,


La franja horaria es GMT +2. Ahora son las 20:29:50.

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