Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:05:52.


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
Copyright 1996-2007 Club Delphi