Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Consejos para ventanas modales ? (https://www.clubdelphi.com/foros/showthread.php?t=15368)

Tecnic2 20-10-2004 20:08:35

Consejos para ventanas modales ?
 
Hola a todos,

En mi aplicación MDI necesito que aparezca nada más abrir el programa una ventana modal para introducir usuario y contrasenya, y que hasta que no le hayan dado al botón "Validar" no puedan tocar nada de la aplicación.
Lo que pido es algun consejo sobre cómo llamarla, configurar los bordes,....de ésta ventana de login.

Muchas gracias por adelantado.

roman 20-10-2004 20:48:22

¿Y qué pasa si le dan al botón cancelar? (porque hay un botón cancelar ¿no?)
Supongo que entonces cerrarás el formulario principal terminando la aplicación. Pero entonces ¿para qué abriste el formulario principal?

La razón de estas preguntas es para comentarte que me parece más adecuado presentar primero que nada la ventana de usuario y contraseña, y sólo si los datos son validados presentar la ventana principal.

Para hacer esto basta que modifiques tu archivo dpr más o menos así:

Código Delphi [-]
begin
  Application.Initialize;

  VentanaLogin := TVentanaLogin.Create(nil);
  if VentanaLogin.ShowModal = mrOk then
  begin
    VentanaLogin.Free;

    Application.CreateForm(TVentanaPrincipal, VentanaPrincipal);
    Application.Run;
  end;
end.

Si el usuario cancela entonces Application.Run no se ejecuta y no se construye la ventana principal terminándose así la aplicación.

// Saludos

pd: ¿El borde? bsDialog

Tecnic2 21-10-2004 18:33:34

Deacuerdo pero....
 
Gracias, me ha funcionado.
Lo que pasa ahora es lo siguiente:
En las propiedades de mi proyecto solo tengo puesto que se habra automáticamente el form de Login. Una vez validado el usuario y contraseña hago lo siguiente:

Self.Release;
Application.CreateForm(TfMain, fMain);
fMain.Show;


Cierro el Login y abro el formulario principal que es MDI. Hasta aqui bien, pero cuando intento abrir después un form MDIChild me da el error "Cannot create form. No MDI forms are currently active."
Para abrir el MDIChild hago lo siguiente:

if fVentas = Nil then
begin
Application.CreateForm(TfVentas, fVentas);
fVentas.Show;
end
else
fVentas.BringToFront;


Gracias por adelantado.

maeyanes 21-10-2004 19:58:26

Estás seguro que la forma principal de tu aplicación tiene la propiedad FormStyle en fsMDIForm?

Tecnic2 21-10-2004 20:27:01

Si claro.
 
Si claro.
De todas formas, en las propiedades del proyecto, como solo tengo el Login como form para abrirse automáticamente, en el campo de arriba que pone Main Form tengo puesto el Login.

maeyanes 21-10-2004 20:32:55

No estoy muy seguro, pero ese puede ser tu problema... que la ventana que tu proyecto tiene como Main Form no sea una MDIForm...

Intenta esto:

Código Delphi [-]
if fVentas = Nil then
begin
  Application.CreateForm(TfVentas, fVentas);
  fVentas.Parent := fMain; // Inserta esta línea...
  fVentas.Show
end
else
  fVentas.BringToFront;

roman 21-10-2004 20:56:33

De la ayuda de Delphi:


Cita:

Note: by default, the form created by the first call to CreateForm in a project becomes the application’s main form
Dado que estás usando CreateForm para crear la ventana del login (cosa que sé porque mencionas que la tienes puesta para abrir en automático) entonces es esta ventana la que queda como principal. Aun cuando fMain sí tiene el estilo fsMDIForm, supongo que la VCL requiere que la ventana MDI sea la principal.

Por ello cíñete al código que te puse desde el principio para crear la ventana del login.

Por otra parte, da la impresión de que estás creando el formulario principal desde la ventana del login lo cual es un error de diseño.

Con estos cambios, verás que, además, no es necesario llamar a fMain.Show ya que el formulario principal siempre es visible por defecto.

Igualmente no necesitas fVentas.Show ya que los formularios MDI hijos siempre son visibles.

// Saludos

Tecnic2 22-10-2004 09:43:22

Me ciño a lo puesto, pero da error.
 
Me ciño a lo que pusiste desde el principio, pero me dice:
Error: "Undeclared indentifier: 'mrOk'

Y de aqui no salgo.

Ayuda?

Tecnic2 22-10-2004 10:05:48

Perdonad, pero siguen los problemas.
 
Lo siento, me faltava añadir el unit Controls.
Bien, ahora lo único que me falta es saber cómo debo cerrar el Login una vez validado el usuario y contraseña.

Lo que tengo hecho hasta ahora es:
- En las propiedades del proyecto tengo puesto solamente que se inicie el fMain.
- Despues de Application.Initialize tengo lo siguiente:
fLogin := TfLogin.Create(Nil);
if fLogin.ShowModal = mrOk then
begin
fLogin.Free;

Application.CreateForm(TfMain, fMain);
Application.Run;
end;

- Y para cerrar el Login una vez validado tengo ésto otro:
fLogin.Release;
fLogin := Nil;


Lo que ocurre es que al cerrar el Login, la aplicación sigue en marcha, pero sin mostrar ningún formulario principal.

Perdonad mi ignoráncia, soy bastante novato.
Muchas gracias por adelantado.

roman 22-10-2004 17:22:39

Te preparé un ejemplo completo. Compáralo con tu código para ver dónde está el problema. El ejemplo consta de tres formularios

MainForm - principal MDI
EditorForm - MDI child
LoginForm - Para iniciar sesión

El principal tiene un menú para crear instancias del editor.

// Saludos

Tecnic2 22-10-2004 17:48:02

Por fin funcionó.
 
Me faltava que los botones del Login tuvieran la propiedad ModalResult rellenada, y lo que eso comporta.

Muchisimas gracias por la paciencia.

Hasta otra.

Hagen 15-09-2006 06:48:47

No se puede bajar el ejemplo, error 404 pagina no encontrada
 
Yo tambien quiero hacer algo similar ..
Podrias corregir el error de descarga Roman

vtdeleon 15-09-2006 07:44:20

Mi madre, hace tiempo de este hilo :eek: :eek: 2004

No he leido todo este hilo, pero supongo que tiene que ver con login y MDI. En la seccion de Trucos existe uno (casi reciente) qeu puede ayudarte. Buscalo

Saludos

roman 18-09-2006 17:24:21

¡Válgame! Ni siquiera recordaba este ejemplo. Pero lo he encontrado de entre las telarañas. Por si de algo sirve, aquí está.

// Saludos

joako 16-10-2006 22:37:20

cambiar la ecepcion por un mensaje de error
 
hola, soy un novato en esto de la programacion y vi tu ejemplo y la verdad no comprendo bien todo lo que hace.
pero bueno, lo que te queria decir es lo siguiente:
en el procedimiento de validar usuario, quiero poner una busqueda para que me valide a los usuarios, con nombre y contraseña. pero como le hago para que en lugar de la exeption, me mande un mensaje de que no son correctos los datos y me pida volver a intentarlo.
es que como esta ahorita me saca.
gracias


La franja horaria es GMT +2. Ahora son las 13:15:02.

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