Ver Mensaje Individual
  #3  
Antiguo 02-09-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Reputación: 20
droguerman Va por buen camino
Cita:
Empezado por neuronic Ver Mensaje
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.
__________________
self.free;

Última edición por droguerman fecha: 02-09-2008 a las 16:13:25.
Responder Con Cita