Dear All,
How to capture images of a window ( as a whole ) when it is offscreen
Here is my code, it only takes images of window wherea they are visible in
the screen, when dragging the window off the screen ( some parts is hidden )
Capturing using the code, only captures the visible parts, the hidden parts
not painted to image handle
activeWindow := GetForegroundWindow;
dc := GetWindowDC(activeWindow);
GetWindowRect(activeWindow,xRect);
x := 0;
y := 0;
width := xRect.Right - xRect.Left;
Height := xRect.Bottom - xRect.Top;
bm.Width := Width;
bm.Height := Height;
{get the screen dc}
if (dc = 0) then exit;
{do we have a palette device?}
if (GetDeviceCaps(dc, RASTERCAPS) AND RC_PALETTE = RC_PALETTE) then begin
{allocate memory for a logical palette}
GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
{zero it out to be neat}
FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)),
#0);
{fill in the palette version}
lpPal^.palVersion := $300;
{grab the system palette entries}
lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256,
lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then begin
{create the palette}
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
end;
{copy from the screen to the bitmap}
BitBlt(bm.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY);
{release the screen dc} ReleaseDc(0, dc);
image1.Picture.Bitmap := bm;