Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   minimizar formulario (https://www.clubdelphi.com/foros/showthread.php?t=73718)

mizzard 11-05-2011 23:36:00

minimizar formulario
 
Hola, tengo un formulario de bienvenida que pide una contraseña, en cuanto se introduce correctamente, hago lo siguiente:

Código:

TfrmMain *frmMain;
        frmMain = new TfrmMain(this);
        frmPassword->Visible=false;
        frmMain->Timer1->Enabled=true;
        frmMain->ShowModal();

En el evento OnClose introduzco este código para cerar ambos formularios ya que lo que hago con el de la contraseña es ocultarlo:

Código:

    this->Close();
    frmPassword->Close();


El problema que tengo es que cuando estoy en el segundo formulario (con el de la contraseña visible =false), y le doy a minimizar en lugar de aparecerme en la barra de inicio, se va a abajo a la izquierda y desaparece, por lo q me toca dar ALT+TAB para volver a restaurarlo...

Como propiedades he puesto:

Botones de cerrar y minimizar
el estilo del borde single
style form normal
posicion desktop center
y windows state Normal

Alguna idea de pq puede ser??, puede que haga mal lo de ocultar el form de password y deberia hacerlo de otra forma mejor??

Muchas gracias y espero q mis threads sirvan a mas gente!!!

Un saludo!

Caral 11-05-2011 23:59:05

Hola
El problema es la llamada al form que loguea.
Tienes el form principal y el loguin.
En el evento Oncreate del form principal llama al form loguin, si estan correctos los datos el loguin se cierra, NO SE OCULTA.
Saludos

mizzard 12-05-2011 00:12:15

Hola, gracias por la respuesta.

Lo que hice en su momento es como el formulario del login es el primero en mostrar, lo tengo como principal y el otro como secundario.... supongo que esto viene indicado aqui:

Código:

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TfrmPassword), &frmPassword);
        Application->CreateForm(__classid(TfrmMain), &frmMain);
        Application->Run();

Me dices que deberia cambiar el orden y el el evento del Main, antes de nada mostrar el frmPassword y si todo OK, entonces cerrarlo y visualizar el frmMain?

Un saludo y gracias!

_cero_ 12-05-2011 05:03:17

Hola. ps si el problema es que la aplicación toma como formulario padre al primer form que se crea teniendo como padre a “Application”, entonces lo que puedes hacer es crear tu form password sin padre y desde el crear el principal si es que dan la contraseña correcta.

Algo así
Código:

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;

        TForm2* f2=new TForm2(NULL); // Creas un form sin padre y desde el creas el principal con Application->CreateForm
        f2->ShowModal();            //
        delete f2;                  // Si no creas un form principal la aplicación se cerrara cuando cierres form2

        Application->Run();
    }
...

Pd. Te adjunto un ejemplo para que veas como.
http://www.megaupload.com/?d=D5S58JTH

escafandra 12-05-2011 11:40:35

Yo propongo algo parecido a la propuesta de _cero_ con otro enfoque:

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;
}

Subo un ejemplo.

Saludos.

mizzard 12-05-2011 11:41:52

Muchas gracias a ambos por la respuesta, en tener un poco de tiempo lo pruebo, pero vamos, con el ejemplo adjunto no creo que tenga problemas ;).

Un saludo!

Angel.Matilla 24-03-2018 12:58:16

Cita:

Empezado por escafandra (Mensaje 399775)
Yo propongo algo parecido a la propuesta de _cero_ con otro enfoque:

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;
}

Subo un ejemplo.

Saludos.

Me gusta este planteamiento que haces para un formulario de login. ¿Puedes pasarme el ejemplo que añadiste en este hilo? El enlace de descarga no me funciona.

escafandra 24-03-2018 13:06:08

1 Archivos Adjunto(s)
Cita:

Empezado por Angel.Matilla (Mensaje 525254)
Me gusta este planteamiento que haces para un formulario de login. ¿Puedes pasarme el ejemplo que añadiste en este hilo? El enlace de descarga no me funciona.

Aquí está: Archivo Adjunto 3659

Saludos.

Angel.Matilla 26-03-2018 10:00:49

Muchas gracias


La franja horaria es GMT +2. Ahora son las 06:00:28.

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