надо его вручную дорисовать

Code:

procedure GetScreenImage(bmp: TBitmap);

var

CI: TCursorInfo;

Icon: TIcon;

II: TIconInfo;

r: TRect;

begin

bmp.Width:= Screen.Width;

bmp.Height:= Screen.Height;

BitBlt(bmp.Canvas.Handle,0,0,Screen.Width,Screen.Height,

GetDC(GetDesktopWindow),0,0,SRCCopy);

//дорисуем курсор

Icon:=TIcon.Create;

r:=Rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));

CI.cbSize:=SizeOf(CI);

if (GetCursorInfo(CI)) and (CI.flags=CURSOR_SHOWING) then

begin

Icon.Handle:=CopyIcon(CI.hCursor);

if GetIconInfo(Icon.Handle,II) then

bmp.Canvas.Draw(ci.ptScreenPos.x - Integer(II.xHotspot) - r.Left, ci.ptScreenPos.y - Integer(II.yHotspot) - r.Top, Icon);

end;

end;

 Автор P.O.D        

На форме у меня стоит TImage (его можно сделать невидимым)

 

В статье описывается пример, который позволяет разделить экран на блоки, а затем поменять эти блоки местами. Так же можно менять размеры блоков и скорость их перемещения. На мой взгляд неплохое начало для создания логической игрушки либо экранной заставки.

 Уверен, что каждый из Вас уже хоть раз видел что-то подобное в действии. При запуске, программа берёт изображение десктопа и разделяет его на определённое количество прямоугольных частей (одинакового размера). После этого часть блоков случайным образом перемещается со своего первоначального места.

 

В качестве параметров передаются:

AHandle - хэндл окна, скриншот которого мы хочем получить

CompressPercent - процент сжатия картинки

AImage - картинка, в которую будет помещено изображение

в случае успешного скриншота функция вернет True  {©Drkb v.3}

 

Я хочу представить простой мульти-экран эмулятор, написанный на Delphi.

Он состоит в небольшой форме размещения в правом нижнем углу экрана, прямо над трее, которая состоит из 5 кнопок.

В начале первая кнопка вниз; затем, когда я нажимаю другую кнопку,  открывается новый новый рабочий стол. В этом новом рабочем столе я могу открыть другие программы

и так далее с другими кнопками. Когда я вернусь к одной из кнопок,  Я буду видеть только заявки, открытые в этом конкурсе без других.

Фокус состоит в том, чтобы сделать следующие шаги непосредственно перед нажатием другой кнопки:

 

сode:

var

Image3: TImage;

 

procedure TSaverForm.CopyScreen;

var

 

DeskTopDC: HDc;

DeskTopCanvas: TCanvas;

DeskTopRect: TRect;

begin

 

Image3 := TImage.Create(SaverForm);

with Image3 do

begin

   Height := Screen.Height;

   Width := Screen.Width;

end;

Image3.Canvas.copymode := cmSrcCopy;

DeskTopDC := GetWindowDC(GetDeskTopWindow);

DeskTopCanvas := TCanvas.Create;

DeskTopCanvas.Handle := DeskTopDC;

Image3.Canvas.CopyRect(Image3.Canvas.ClipRect, DeskTopCanvas,

   DeskTopCanvas.ClipRect);

Image2.Picture.Assign(Image3.Picture);

{image2 расположен на целевой форме и выровнен по области клиента}

end;

 

procedure TSaverForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 

Image3.Free;

end;

 

Обладая такими способностями, вы сможете, например, разлиновать поверхность экрана как в тетради в клеточку, выводить пугающие пользователя надписи и даже создать эффект окаменение экрана, если, конечно, разработаете алгоритм выполнения данной задачи.