Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Form Principal Modal (https://www.clubdelphi.com/foros/showthread.php?t=63573)

CarlosHernandez 19-02-2009 18:57:12

Form Principal Modal
 
Hola a todos! tengo un problema. yo necesito colocar en algun momento mi form principal como modal. eso lo hago con ShowModal. funciona correctamente, solo que el form principal al ser llamado modal se me coloca detras de la ventana secundaria que tengo abierta. he probado con bringtofront. sendtoback. stayontop. de verdad ya no se que probar.

coso 19-02-2009 21:35:04

hola, si a la ventana "secundaria" la llamas con showmodal tambien, es normal que te aparezca en primer plano. Si no es el caso, X/ deberas explicarnos mejor como son las forms, pues seria bastante raro. saludos.

Neftali [Germán.Estévez] 20-02-2009 09:57:23

Yo también voto por algo de código.:D:D

Caro 20-02-2009 13:31:54

Cita:

Empezado por Neftali (Mensaje 338822)
Yo también voto por algo de código.:D:D

Y yo también :D.

Saluditos

CarlosHernandez 25-02-2009 20:35:53

ok, tengo mi form principal y uno secundario, cuando intento llamar modal desde el form secundario a mi form principal, este se pone detras del secundario, pero si llamo desde mi form secundario otro secundario si lo muestra en el frente normal.

el formstyle es fsnormal, y los llamo

Código Delphi [-]
formppal.showmodal;


y lo raro es que solo pasa con el form principal

AzidRain 25-02-2009 21:51:33

Es simple y obvio: El form principal en todo momento está activo pues cuando lo cierras terminas la aplicación, luego cada formulario que abras o llames como ShowModal desde algun punto del form principal, se mostrara siempre encima del último form modal abierto (en este caso el principal). Ahora bien, cuando quieres "mostrar" tu form principal desde un form modal que esta abierto lo único que haces es pasarle el foco al form principal y como aun no cierras el form secundario, simplemente queda detrás.

Ignoro que pretendes hacer al llamar al form principal desde uno que ya esta abierto, en todo caso tienes que cerrar el form secundario para regresar al principal.

Neftali [Germán.Estévez] 25-02-2009 22:07:06

Cita:

Empezado por Neftali (Mensaje 338822)
Yo también voto por algo de código

Cita:

Empezado por CarlosHernandez (Mensaje 339326)
el formstyle es fsnormal, y los llamo
Código Delphi [-]
formppal.showmodal;


Vale. :o
Pensaba en "algo más" de código. :D:D:D

roman 25-02-2009 22:10:06

Yo, la verdad que no le veo sentido a querer mostrar el formulario principal desde uno secundario, por algo es el principal.

Quizá, si Carlos nos explica más acerca de lo que está haciendo (yo no pido código sino un caso de uso) podríamos indicarle un mejor camino.

Esperemos que no tarde otros cinco dias :p

// Saludos

CarlosHernandez 26-02-2009 01:11:21

Cita:

Esperemos que no tarde otros cinco dias
jeje, sorry por durar tanto en contestar pero me fui de viaje aprovechando los dias de carnaval.

ok la aplicacion comienza con una pantalla de login y contraseña para accesar al sistema, y por defecto es la primera que se crea (por eso digo que es la principal), a lo que entre al sistema, la mayorias de los otros formularios que lo conforman tienen un boton de cambio de usuario y pretendo mostrar mi form1 (el del login) como modal, pero como es el principal ya que es el primero que se crea me lo muestra destra del formulario desde el cual lo llamo, y solo pasa con este formulario.

probe otra aplicacion haciendo un form principal y uno secundario y pasa exactamente lo mismo osea que es cuestion del formulario que se crea primero.

en la aplicacion probe poniendo primero que se creara otro form, y llamo a mi form de login y perfecto se muestra correctamente, pero lo coloco que se cree primero y sigue igual, me desabilita en donde estoy parado y muestra habilitado pero detras.

amigo Neftali no coloco mas codigo porque es el unico que utilizo para llamarlo, pero dime que quieres que coloque y sin problema lo publico..

Código Delphi [-]
form1.showmodal;


una solucion que encontre fue mostrar el form que tengo de menu del sistema(lo puse como principal) y en el onactivate hacer que muestre el form1(el del login y ya quedo como secundario) con el codigo que ya les puse arriba.

todo bien pero me salio otro error, y es que cuando lo muestra no coloca por defecto el setfocus en el edit del login, y en el form1( login) en el evento onactivate y/o en el onshow coloque

Código Delphi [-]
edit1.setfocus;

pero nada, incluso hice un timer y nada, y solo ocurre cuando abro por primera vez la aplicacion porque luego si muestra el setfocus normal desde cualquier form que lo llame....


no se que mas decirles, solo que lo probe en delphi 6 y 2007...

gracias

roman 26-02-2009 01:47:01

Cita:

Empezado por CarlosHernandez
la aplicacion comienza con una pantalla de login y contraseña para accesar al sistema, y por defecto es la primera que se crea (por eso digo que es la principal)

Por aquí hubieras empezado :)

Como has notado, el primer formulario que se crea es el principal. Pero esto no es totalmente cierto. Más exacto es decir que el primer formulario que se crea con Application.CreateForm es el principal.

En otras palabras, es CreateForm el que establece quién será el formulario principal. Pero dicho método no es el único para crear formularios. Lo usual aquí es modificar a mano el archivo dpr que normalmente se ve así:

Código Delphi [-]
program Project1;

uses
  Forms,
  uMain in 'uMain.pas' {MainForm},
  uLogin in 'uLogin.pas' {LoginForm};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TLoginForm, LoginForm);
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

Entonces, para que no se interprete a LoginForm como el principal, pero que aún así sea el primero que ve el usuario, tienes que crearlo de otra forma, por ejemplo:

Código Delphi [-]
program Project1;

uses
  Windows, // para la constante ID_OK
  Forms,
  uMain in 'uMain.pas' {MainForm},
  uLogin in 'uLogin.pas' {LoginForm};

{$R *.res}

begin
  Application.Initialize;

  LoginForm := TLoginForm.Create(Application);
  if LoginForm.ShowModal = ID_OK then
  begin
    LoginForm.Free; // o LoginForm.Hide
    Application.CreateForm(TMainForm, MainForm);
  end;

  Application.Run;
end.

// Saludos


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

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