Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Efecto Apagar Windows XP (https://www.clubdelphi.com/foros/showthread.php?t=59600)

MaMu 02-09-2008 03:32:57

Efecto Apagar Windows XP
 
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

Cita:

Empezado por neuronic (Mensaje 311041)
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í.
Código Delphi [-]
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;
Código Delphi [-]
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 .


La franja horaria es GMT +2. Ahora son las 01:00:42.

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