PDA

Ver la Versión Completa : Efecto Apagar Windows XP


MaMu
02-09-2008, 03:32:57
Como puedo lograr el Efecto Apagar Windows XP, es decir, que el fondo de la pantalla quede en tono de grises, mientras que el Form de mi aplicación quede en colores.

Alguna idea?

Saludos y gracias

neuronic
02-09-2008, 13:04:21
para crear este efecto podrias capturar el escritorio, pasarlo a escala de grises y ponerlo al fondo de tu aplicacion a pantalla completa, esconder la barra de windows y despues con una ventana modal la aplicacion en si!!!

droguerman
02-09-2008, 16:05:13
para crear este efecto podrias capturar el escritorio, pasarlo a escala de grises y ponerlo al fondo de tu aplicacion a pantalla completa, esconder la barra de windows y despues con una ventana modal la aplicacion en si!!!

En código sería algo así.

procedure BlancoYNegro(aControl : TControl);
var
dsk : HDC;
bdc : HDC;
num, i, x, y: integer;
pe: array[0..255] of TPaletteEntry;
ct: array[0..255] of TRGBQuad;

prom : byte;
c : word;
begin
//obtener acceso al control
dsk := GetDC(aControl.handle);
//tamaño de la captura
FBitmap.Width := aControl.Width;
FBitmap.Height := aControl.Height;
FBitmap.PixelFormat:= pf8bit;

num := GetPaletteEntries(FBitmap.Palette,0,256,pe);


for i := 0 to num-1 do
begin
//convertir a tono de gris, puedes jugar con los valores y obtener otros
//resultados
c := trunc(pe[i].peRed*0.21+pe[i].peGreen*0.71+pe[i].peBlue*0.08);
ct[i].rgbBlue := c;
ct[i].rgbGreen := c;
ct[i].rgbRed := c;
ct[i].rgbReserved := 0;
end;


SetDIBColorTable(FBitmap.Canvas.Handle,0,num,ct);
DeleteObject(FBitmap.ReleasePalette);

//el mapa de bits destino aqui especificas donde quieres poner la pantalla capturada
bdc := FBitmap.Canvas.Handle;
BitBlt(bdc, 0,0, FBitmap.Width, FBitmap.Height, dsk, 0, 0, SRCCOPY);
ReleaseDC(aControl.Handle, dsk);
visible:= true;
end;


Edito: el código que te puse es para una captura en blanco y negro, para hacer el efecto de apagado, necesitas meterlo dentro de un bucle cambiando los valores numéricos (en el ejemplo 0.21 0.71 0.8) y con usando un delay al gusto del cliente.

juanlaplata
15-06-2011, 14:48:21
Solo para q quede registrado por si alguien llega mediente una busqueda.
A mi tambien me interesaba dar este efecto a mi aplicacion , etc ... y un dia me desperte creativo ( dicho asi por utilizar solo lo que se tiene a mano y alcanze de conocimientos ) y se me ocurrio lo siguiente.
Tener un Form vacio, sin borde, sin componentes, sin nada, con las siguientes propiedades:
---------------------------
AlphaBlend = True
AlphaBlendValue = 200
BorderStyle = bsNone
WindowState = wsMaximized
---------------------------

Luego, al momento de usar dicho efecto;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3 := TForm3.Create(Application);
Form3.Show;
//----------------------------------
Form2 := TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
//----------------------------------
Form3.Free;
end;
Donde Form1 es el ppal, Form2 es el q quiero que quede activo en primer plano, y Form3 es el q produce el efecto de apagado.
Y para aquel que quiere llegar un poco mas alla, se puede hacer una rutina jugando con la propiedad AlphaBlendValue llevandola desde 0 hasta 200 para q el efecto sea progresivo .