Шаг 22.
Visual Prolog.
Обработка буфера обмена

    На этом шаге мы рассмотрим обработку буфера обмена.

    Буфер обмена используется для обмена данными между приложениями. Приложения должны быть способны помещать данные в буфер обмена и получать их оттуда. Текст и изображения можно поместить в буфер обмена, вызывая предикаты 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 Кб).

    На следующем шаге мы рассмотрим печать.




Предыдущий шаг Содержание Следующий шаг