Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar Splash Imposible ... (https://www.clubdelphi.com/foros/showthread.php?t=31210)

serhasae 02-05-2006 16:17:11

Cerrar Splash Imposible ...
 
No Consigo cerrar un Splash desde que puse el codigo para minimizar la pantalla principal como un icono en la barra de tareas al lado del reloj (trayicon), el Splash pasa de las lineas de cierre, he probado con un componente echo y con el truco de trucomania con iguales resultados:

splash.close;
splash.free;
splash:=nil;


A que puede ser debido que el Splash siga visualizandose aunque yo lo cierre
cuando se muestra el form principal... Gracias.

delphi.com.ar 02-05-2006 16:36:36

¿Cómo lo estas mostrando?...

andressanchez 02-05-2006 16:46:24

He utilizado el truco #32 de trucomania y me funciona a la perfección. Te recomiendo que hagas una revisión del código, te dejo el link para que lo verifiques http://www.q3.nu/trucomania/ftesp.html.

serhasae 02-05-2006 22:54:09

A ver utilize el truco de trucomania no para mostrar el splash sino para minimizar la ventana al lado del reloj (trayicon).

A ver tengo un formulario llamado Splash y ahi tengo una barra progressbar.

En el principal el primero que se crea tengo:
Código Delphi [-]
 
var
Splash:TSplash;
 
Application.Initialize;
 
  Application.CreateForm(TPasswordDlg, PasswordDlg);
  Application.CreateForm(TFPass, FPass);
  Application.CreateForm(TFQuickR, FQuickR);
  Application.CreateForm(TFBRNomNino, FBRNomNino);
  Application.CreateForm(TFSelec, FSelec);

  Splash:=TSplash.Create(nil);
  Splash.Gauge.Position:=0;
  Splash.Gauge.Step:=6;
  Splash.Show;
  Application.ProcessMessages;

  Application.CreateForm(TFPrincipal, FPrincipal);
  Application.CreateForm(TFMes, FMes);
  Application.CreateForm(TFRecibi, FRecibi);
  Application.CreateForm(TFReciMes, FReciMes);
  Application.CreateForm(TFBusRecibos, FBusRecibos);
  Application.CreateForm(TFBusRecibo, FBusRecibo);
  Application.CreateForm(TFBRecNom, FBRecNom);
  Application.CreateForm(TFBRecibos, FBRecibos);
  Application.CreateForm(TRPagados, RPagados);

y mas abajo tengo:

Splash.Close;
Splash.Free;
Splash:=nil;

Y Luego el Application.Run que era obvio por eso en una primera instancia no lo puse.

Lepe 03-05-2006 09:00:06

Pues a mí me falta el Application.Run

saludos

Lepe 03-05-2006 20:20:23

Es obvio que debe estar.... pero ¿donde? jejeje, si lo tenías antes del Splash.Free, era fácil la respuesta :D

En principio, sustituyo el Application.ProcessMessages por un Splash.Update. Como la aplicación no está corriendo al completo, no me queda claro si va a procesar los mensajes bien.

Las lineas:
Splash.Close;
Splash.Free;
Splash:=nil

las sustituyo por FreeAndNil(Splash), es exactamente lo mismo.

Prueba y me cuentas por fa.

Saludos

serhasae 06-05-2006 00:50:57

A ver lepe he probado lo que me has dicho, con iguales resultados, no se cierra, lo que pasa es que se queda detras y no me habia fijado hasta ahora yo creia que era debido al trayicon que habia añadido pero al mirar codigo antiguo me he dado cuenta que nunca lo cerro hasta que se cierra totalmente la aplicación. Simplemente al ponerme delante la form principal pues quedaba detras y no lo veia...

Bueno alguna sugerencia a que es raro que no lo cierre. Saludos.

serhasae 06-05-2006 01:02:38

Solucion
 
En tu form principal, declara una variable pública llamada SplashScreenHandle:
var SplashScreenHandle:integer;
En el fuente del projecto, añade una sección var como la siguiente:
VAR SplashScreen:TSplashScreen;
Dentro de la sección begin-end, añade el siguiente código al principio:
Begin
{Mostramos la Splash Screen}
SplashScreen:=TSplashScreen.Create(Application);
Splashscreen.show;
SplashScreen.update;

{Creamos la form principal}
Application.createform(MainForm,MainFormUnit);

MainFormUnit.SplashScreenHandle:=SplashScreen.handle;
{Aqui el resto de tu projecto...} end.

Y al Mostrar el Form:
SendMessage(SplashScreenHandle,WM_CLOSE,0,0);

Sacado del Rinconcito de Delphi.

protector2020 15-08-2007 03:25:30

una sugerencia.
 
este es el codigo de mi proyecto donde uso una splashscreen, a mi me funciona bien. lo aprendi de Trucomania.

Código:

program CdAPProy;

uses
  Forms,
  CdAPForma in 'CdAPForma.pas' {Form1},
  CdAPDatos in 'CdAPDatos.pas' {DataModule2: TDataModule},
  Splash in 'Splash.pas' {Form2};
...

{$R *.res}

begin
  Form2:=TForm2.Create(Application);
  Form2.Show;
  Form2.Update;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule2, DataModule2);
...
  Form2.Hide;
  Form2.Free;
  Application.Run;
end.

adicionalmente agrego el codigo de creacion de la splash, por si es de ayuda.

Código:

procedure TForm2.FormCreate(Sender: TObject);
begin
Self.Image1.Left:=0;
Self.Image1.Top:=0;
Self.Image1.Picture.LoadFromFile('splash.jpg');
Self.Image1.AutoSize:=True;
Self.ClientHeight:=Self.Image1.Height;
Self.ClientWidth:=Self.Image1.Width;
Self.BorderStyle:=bsNone;
Self.Position:=poDesktopCenter;
end;

espero que les sea de ayuda. saludos.

mr_mustard 09-10-2007 21:27:18

A mi me pasó algo parecido:

begin
Application.Initialize;
Application.Title := 'Project1';
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TForm1, Form1);
.
.
.

Application.CreateForm(TForm3, Form3);
Application.CreateForm(TSplashForm, SplashForm);
SplashForm.Hide;
SplashForm.Free;
Application.Run;
end.

El problema era la linea roja, por que si lo estoy creando, ya no necesita ser creado de nuevo.


La franja horaria es GMT +2. Ahora son las 00:36:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi