How to capture the Desktop and shade it (Views: 28)
Problem/Question/Abstract: How to capture the Desktop and shade it Answer: This unit takes the Desktop and makes it look like it does when you select Shutdown from the Start menu. You need a TForm with BorderStyle set to bsNone and a TImage component set to alClient. procedure TForm1.FormShow(Sender: TObject); procedure Veil; var BrushBmp: TBitmap; X, Y: Integer; begin BrushBmp := TBitmap.Create; with BrushBmp do begin Width := 8; Height := 8; for X := 0 to 7 do for Y := 0 to 7 do if Odd(X + Y) then Canvas.Pixels[X, Y] := clWhite else Canvas.Pixels[X, Y] := clBlack; end; Image1.Canvas.Brush.Bitmap := BrushBmp; {The PatBlt function paints the given rectangle using the brush that is currently selected into the specified device context. The brush color and the surface color(s) are combined by using the given raster operation.} PatBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, $000A0329); BrushBmp.Free; end; var ScreenDC: HDC; tmpRect: TRect; tmpBitmap: TBitmap; begin {Set the form bounds} SetBounds(0, 0, Screen.Width, Screen.Height); {get our screen device context} ScreenDC := GetDC(0); {create our bitmap} tmpBitmap := TBitmap.Create; {get the screen area} tmpRect := Rect(0, 0, Screen.Width, Screen.Height); {set the bitmap to the screen area} tmpBitmap.Width := tmpRect.Right - tmpRect.Left; tmpBitmap.Height := tmpRect.Bottom - tmpRect.Top; try {transfer the screen pixels to the bitmap} BitBlt(tmpBitmap.Canvas.Handle, tmpRect.Left, tmpRect.Top, tmpBitmap.Width, tmpBitmap.Height, ScreenDC, tmpRect.Left, tmpRect.Top, SRCCOPY); {assign the bitmap image to our TImage} Image1.Picture.Bitmap.Assign(tmpBitmap); finally {free our bitmap} tmpBitmap.Free; {release our screen device context} ReleaseDC(0, ScreenDC); end; Veil; end; end. |