Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Al crear el formulario ejecuta evento OnShow(), Por qué? (https://www.clubdelphi.com/foros/showthread.php?t=79490)

El_Raso 11-07-2012 17:15:01

Al crear el formulario ejecuta evento OnShow(), Por qué?
 
Que tal foristas... mi aplicacion estaba muy bien, me puse a trabajar con HotKey, para poner una tecla de acceso en toda la aplicacion (y total no pude)
y ahora al crear el formulario principal en el fuente del proyecto (.dpr) automaticamente ejecuta el evento OnShow de la Form.

A que se debera eso?

Aqui el codigo... mi Form principal es FMenu, en el OnShow Mando a abrir una Tabla de configuracion y me da un error de acceso negado porque en realidad el DataModule no
esta creado aun.

Alguien por favor que vea el codigo y opine alguna sugerencia.

Código Delphi [-]
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
     if ReadString_Ini(IniFile, 'Setup', 'ModoVisor','No') = 'No' then
        begin
            Sem := CreateSemaphore(nil,0,1,'SIHotel.Exe');
            if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then 
            begin
                CloseHandle( Sem );
                MsgError('La Aplicacion ya se está ejecutando!!!');
                Application.Terminate;    
                Exit;
            end; 
         end;
      FSplash := TFSplash.Create(Application);
      FSplash.Show;  
      FSplash.Update;
      Application.Title := 'Sistema de Información de Hotel';
      Application.CreateForm(TFMenu, FMenu);
      FSplash.Gauge.Position := 30;
      FSplash.Update;
      try
         FSplash.Gauge.Position := 50;
         FSplash.Update;
         Application.CreateForm(TTablas, Tablas);
      except
        on E: Exception do 
          begin
            MsgError('Se produjo el siguiente error al crear el modulo de datos'#13+
                     '**** '+E.Message+'****'#13+
                     'Esto provoca que no se pueda iniciar,'+
                     'Si el problema persiste, llamar al soporte');
            Application.Terminate;         
          end;
      end;
      FSplash.Gauge.Position := 50;
      FSplash.Update;
      Application.CreateForm(TFVentaRapida, FVentaRapida);
      FSplash.Gauge.Position := 60;
      FSplash.Update;
      Application.CreateForm(TFBuscaCliente, FBuscaCliente);
      FSplash.Gauge.Position := 70;
      FSplash.Update;
      Application.CreateForm(TFAutorizacion, FAutorizacion);
      FSplash.Gauge.Position := 80;
      Application.CreateForm(TFEntradaSalida, FEntradaSalida);
      FSplash.Update;
      FSplash.Gauge.Position := 90;
      Application.CreateForm(TFDevueltaEfectivo, FDevueltaEfectivo);
      FSplash.Update;
      FSplash.Gauge.Position := 95;
      Application.CreateForm(TFEstadosClientes, FEstadosClientes);
      FSplash.Gauge.Position := 97;
      Application.CreateForm(TFCambioHabitacion, FCambioHabitacion);
      FSplash.Hide;
      FSplash.Free;
      Application.Run;

Al González 11-07-2012 18:29:57

El evento OnShow se dispara al abrirse el formulario, lo cual es bastante normal si se trata del formulario principal de la aplicación. Lo habitual es crear los módulos de datos que contienen elementos necesarios para toda la aplicación, antes de crear los formularios.

Saludos. :)

El_Raso 11-07-2012 18:36:35

Cita:

Empezado por Al González (Mensaje 437140)
El evento OnShow se dispara al abrirse el formulario, lo cual es bastante normal si se trata del formulario principal de la aplicación. Lo habitual es crear los módulos de datos que contienen elementos necesarios para toda la aplicación, antes de crear los formularios.

Saludos. :)

Gracias Al por contestar... tienes razon, pero lo que me ocurre es que al ejecutarse la linea:

Application.CreateForm(TFmenu, FMenu);

Se ejecuta automaticamente el evento OnShow y ese evento solo debe ejecutarse si le hago un .Show o .ShowModal a la Form. y en mi caso
como Fmenu es mi formulario principal deberia de ejecutarse el OnShow a ejecura Application.Run

Espero darme a entender...

Al González 11-07-2012 19:32:47

Ahora te entiendo. :)

La diferencia entre un comportamiento y otro reside en la propiedad Visible del formulario principal, seguramente la tienes con un valor de True. Ponla en False antes de compilar, de esta manera se mostrará hasta que sea llamado el método Run del objeto Application.

El_Raso 12-07-2012 15:19:06

Cita:

Empezado por Al González (Mensaje 437148)
Ahora te entiendo. :)

La diferencia entre un comportamiento y otro reside en la propiedad Visible del formulario principal, seguramente la tienes con un valor de True. Ponla en False antes de compilar, de esta manera se mostrará hasta que sea llamado el método Run del objeto Application.

Hermano Al.... GRACIAS!!! todos los dias aprendemos algo en este foro... Gracias de corazon.


La franja horaria es GMT +2. Ahora son las 20:05:57.

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