На этом шаге мы рассмотрим обработку буфера обмена.
Буфер обмена используется для обмена данными между приложениями. Приложения должны быть способны помещать данные в буфер обмена и получать их оттуда. Текст и изображения можно поместить в буфер обмена, вызывая предикаты cb_Putstring или cb_PutPicture, и восстановить из буфера обмена, вызывая cb_GetString или cb_GetPicture.
В качестве примера мы можем улучшить наше окно Sweep таким образом, чтобы всякий раз, когда выбран пункт меню Copy to Clipboard, рисунок копировался в буфер обмена, а когда выбран пункт Paste from Clipboard, изображение вставлялось из буфера обмена.
Для этого во всплывающем меню создадим новые пункты Copy to Clipboard (с константой id_edit_copy) и Paste from Clipboard (с константой id_edit_paste).
Рис.1. Создание новых пунктов
Перед тем как помещать изображение в буфер обмена, его нужно взять из окна, в котором оно находится. Один из методов - использование предиката pict_Open, затем нужно совершить операции рисования, чтобы создать картинку, и вернуть изображение при вызове предиката pict_Close. Предикат sweep_Draw находит все точки, затем вызывает предикат connect со списком точек, тем самым перерисовывая изображение. Таким образом, мы дублируем последовательность операций рисования между вызовами pict_Open и pict_Close. Как и в случае других предложений, обрабатывающих функциональные возможности меню Sweep Popup, вам нужно добавить предложения для этих событий (к файлу Sweep.pro) вручную:
win_sweep_eh(_Win,e_Menu(id_edit_copy,_),0):-!, RCT=win_GetClientRect(_Win), PictWin=pict_Open(RCT), sweep_Draw(PictWin,_Win), Picture=pict_Close(PictWin), cb_PutPicture (Picture), pict_Destroy(Picture) . win_sweep_eh(_Win,e_Menu(id_edit_paste,_),0):-!, Picture=cb_GetPicture(), pict_Draw(_Win, Picture,pnt (0,0),rop_SrcCopy), pict_Destroy(Picture).
Рис.2. Добавление кода
Обратите внимание, что, т. к. мы копируем растровый рисунок, а не список точек, вставленное изображение не будет перерисовано в событии e_Update.
Созданное приложение можно взять здесь (442,7 Кб).
На следующем шаге мы рассмотрим печать.