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;
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
imgDeskTop.Picture.Bitmap:=GetScreenShot;
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.