Дисплей
надо его вручную дорисовать
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
Обладая такими способностями, вы сможете, например, разлиновать поверхность экрана как в тетради в клеточку, выводить пугающие пользователя надписи и даже создать эффект окаменение экрана, если, конечно, разработаете алгоритм выполнения данной задачи.
В качестве параметров передаются:
AHandle - хэндл окна, скриншот которого мы хочем получить
CompressPercent - процент сжатия картинки
AImage - картинка, в которую будет помещено изображение
в случае успешного скриншота функция вернет True {©Drkb v.3}
с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; |
На форме у меня стоит TImage (его можно сделать невидимым)
В статье описывается пример, который позволяет разделить экран на блоки, а затем поменять эти блоки местами. Так же можно менять размеры блоков и скорость их перемещения. На мой взгляд неплохое начало для создания логической игрушки либо экранной заставки.
Уверен, что каждый из Вас уже хоть раз видел что-то подобное в действии. При запуске, программа берёт изображение десктопа и разделяет его на определённое количество прямоугольных частей (одинакового размера). После этого часть блоков случайным образом перемещается со своего первоначального места.
Я хочу представить простой мульти-экран эмулятор, написанный на Delphi.
Он состоит в небольшой форме размещения в правом нижнем углу экрана, прямо над трее, которая состоит из 5 кнопок.
В начале первая кнопка вниз; затем, когда я нажимаю другую кнопку, открывается новый новый рабочий стол. В этом новом рабочем столе я могу открыть другие программы
и так далее с другими кнопками. Когда я вернусь к одной из кнопок, Я буду видеть только заявки, открытые в этом конкурсе без других.
Фокус состоит в том, чтобы сделать следующие шаги непосредственно перед нажатием другой кнопки: