Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

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: 449
Poder: 12
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
  #2  
Antiguo 13-10-2007
pcpower pcpower is offline
Registrado
 
Registrado: oct 2007
Posts: 6
Poder: 0
pcpower Va por buen camino
La alternativa más usual y sencilla que se utiliza es poner el Form contenedor con BorderStyle:=bsNone, TransparentColorValue:=csXXX en algún color no utilizado en la imagen y TransparentColor=true
Saludos.
Responder Con Cita
  #3  
Antiguo 13-10-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 449
Poder: 12
xEsk Va por buen camino
pcpower pero lo que tú propones, no soporta transparencias de varios niveles (para sombras, efecto de cristal, etc...), sólo: Transparente o no transparente.

Si te fijas en el ejemplo o en la imagen de muestra, veras a lo que me refiero.

Saludos.
Responder Con Cita
  #4  
Antiguo 17-10-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.676
Poder: 12
Chris Va por buen camino
desde hace tiempo utilizo un truco parecido con TPNGImage, pero lo que hago de un forma un poco más simple y rápida.

Código Delphi [-]
Procedure Form1onCreate(Sender : TObject);
var
SplashImage : TPNGImage;
Begin
SplashImage := TPNGImage.create;
SplashImage.LoadFromFile('C:\splash.png'); //opcionalmente de los recursos de la aplicación

Self.Brush.style := bsClear; // da el mismo efecto que pintar el escritorio.
Self.Canvas.Draw(SplashImage);
end;

esa es la idea, no sé si el código está bien escrito porque lo hago de memoria, pero por ahí va.
Responder Con Cita
  #5  
Antiguo 17-10-2007
pcpower pcpower is offline
Registrado
 
Registrado: oct 2007
Posts: 6
Poder: 0
pcpower Va por buen camino
Tienes razón xEsk. Es un efecto bastante màs complejo. Se me ocurre también que se podrían practicar efectos extraños sobre la pantalla capturada, como o un dimmeado, o borrarla como un pizarrón,o jugar con los ìconos obteniedo las posiciones en la pantalla de alguna manera, etc... Yo, de todos modos, si veo un programa que arranca así, tiro del cable de power de la PC inmediatamente!!! jeje
Saludos.
Responder Con Cita
  #6  
Antiguo 27-02-2008
Avatar de neuronic
neuronic neuronic is offline
Miembro
 
Registrado: jul 2007
Ubicación: Catalunya
Posts: 30
Poder: 0
neuronic Va por buen camino
Buenas, el otro dia instale el windows live y su splashscreen me gusto, usa transparencia y por lo que eh podido observar si mueves la ventana de atras, refresca el splashscreen, intentare comprovar con el api spy haver si esta capturando pantalla todo el tiempo o bien es un form con el blend activado, see you
Responder Con Cita
  #7  
Antiguo 28-02-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 449
Poder: 12
xEsk Va por buen camino
neuronic si descubres algo, sería interesante saberlo.

Saludos
Responder Con Cita
  #8  
Antiguo 22-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.677
Poder: 0
coso Va por buen camino
si mientras se van creando las forms (Application.CreateForm...) vas poniendo update no se redibuja?
Responder Con Cita
  #9  
Antiguo 23-05-2008
Avatar de neuronic
neuronic neuronic is offline
Miembro
 
Registrado: jul 2007
Ubicación: Catalunya
Posts: 30
Poder: 0
neuronic Va por buen camino
el splash screen de windows live, me parece que utiliza blend al form
Responder Con Cita
  #10  
Antiguo 27-05-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.676
Poder: 12
Chris Va por buen camino
Al respecto, estuve leyendo un excelente artículo la semana pasada para conseguir este efecto. Mediante la llamada a la función API, UpdateLayeredWindow.

Pros:
* Es súper sencillo de implementar,
* Se encarga de dibujar automáticamente el canvas del form cuando se mueve una ventana o se cambia el Z-Order de éstas.
* Es relativamente rápido de implementar.
* Se pueden conseguir excelentes efectos incluso con BMP de 32bits.

Contras:
* Las ventanas que hagan uso de esta API, no pueden deberían de contener controles dentro de ellas (pues no se dibujan).
* Disponible solamente en win2k, XP y posteriores.

Aquí les dejo el enlace para que lo chequeen (en inglés).
http://melander.dk/articles/alphasplash/

Este es un artículo bien completo, incluso dedica casi la mitad de éste a explicarnos como hacer BMPs de 32bits en Photoshop.

Saludos a todos los del club. Bye.
Responder Con Cita
  #11  
Antiguo 27-05-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 449
Poder: 12
xEsk Va por buen camino
D&W muy interesante, gracias.
Responder Con Cita
  #12  
Antiguo 30-07-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.630
Poder: 18
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Una pregunta. ¿Y si se crea una ventana sin borde con el fondo totalmente transparente y se le dibuja encima la imagen del "splash"? Se me acaba de ocurrir.
Responder Con Cita
  #13  
Antiguo 03-02-2012
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 156
Poder: 14
Phacko Va por buen camino
Muy buenas aportaciones, lo que mas me agrada es el entusiasmo con que se comparten opiniones e ideas, son grandes.

Gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 04:13:14.


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