Ver Mensaje Individual
  #1  
Antiguo 07-10-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Reputación: 19
xEsk Va por buen camino
Splash Screen - Con transparencias (tipo PhotoShop, etc...)

Seguro que alguien se ha fijado que muchos programas, sus Splash Screen tienen sombras, transparencias, etc... como por ejemplo el PhotoShop, el CodeBlocks, etc...

Así pues, hoy por inspiración divina, me ha venido una imagen clara y facilísima de como hacerlo xD

La idea del truco es muy simple: Capturar la imagen del escritorio en el momento de mostrar el Splash, y encima de ésta, mostrar nuestra imagen.

Para la receta necesitamos:

El componente TPngImage (http://pngdelphi.sourceforge.net/). Cualquier otro componente que realice lo mismo que este, es valido.

Empecemos pues:

1- Creamos la imagen del SplashScreen.
2- Creamos un nuevo formulario (frmSplashScreen)
3- Configuramos el formulario: BorderStyle:=bsNone; y Position:=poScreenCenter; las dimensiones del form (width y height) deben ser iguales a las de la imagen.
4- Agregamos un "TImage" (imgDeskTop) que nos servirá para mostrar la captura de pantalla, y ponemos la propiedad: Center:=True;
5- Agregamos otro "TImage" (imgSplashScreen) para mostrar la imagen del Splash Screen.
6- Ahora, sólo nos queda el código para realizar el truco:
Código Delphi [-]
uses PngImage;

procedure TfrmSplashScreen.BuildSplashScreen;
  // get an screen shot
  function GetScreenShot: TBitmap;
  var
    Desktop: HDC;
  begin
    Result  := TBitmap.Create;
    Desktop := GetDC(0);
    try
      try
        Result.PixelFormat:=pf32bit;
        Result.Width:=Screen.Width;
        Result.Height:=Screen.Height;
        BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
        Result.Modified:=True;
      finally
        ReleaseDC(0, Desktop);
      end;
    except
      Result.Free;
      Result:=nil;
    end;
  end;
begin
  // get the current "desktop"
  imgDeskTop.Picture.Bitmap:=GetScreenShot;
  // load the "Splash Screen" picture
  imgSplashScreen.Picture.LoadFromFile('media\SplashScreen.png');
end;

El efecto es realmente bueno, pero tiene los mismos fallos que cualquier otro Splash Screen de este tipo: "Si se cambia el fondo mientras esta el Splash Screen abierto, este no se actualiza...".

Aqui una captura de pantalla del truco: http://www.upload-images.net/imagen/fa2a21e731.png

También he subido las fuentes (y un ejecutable) del truco en el Directorio del ClubDelphi, para quién lo quiera probar: http://www.terawiki.com/clubdelphi/archivos/Delphi-Win32/Ejemplos/SplashScreen_SplashScreen_con_transparencias_PNG.zip

Saludos.
Responder Con Cita