Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Begin if Clipboard.HasFormat(CF_BITMAP) then



begin
PasteButton.Enabled:= True;
Break;

end; end; end;

Для начала я делаю кнопку «Вставить» неактивной. Потом я запускаю цикл от 0 до количества форматов в буфере обмена Clipboard.FormatCount. Внутри цикла происходит проверка, если формат соответствует CF_BITMAP, то кнопку «Вставить» можно делать активной и прерывать цикл проверки.

И последнее, что надо сделать в нашей программе – написать обработчик события OnShow для нашей главной формы. В нём пишем следующее:

procedure TForm1.FormShow(Sender: TObject);

begin FClipboardOwner:= SetClipboardViewer(Handle); ClipboardChanged;

end;

В первой строке я вызываю функцию SetClipboardViewer. Она устанавливает указанное в качестве параметра окно (наше главное окно) в системе в качестве наблюдателя за буфером обмена. После этого, как только буфер измениться, нашему окну будет отправлено соответствующее сообщение, и мы его поймаем процедурой WMDrawClipboard.

Во второй строке я вызываю процедуру ClipboardChanged, чтобы при старте программы произошла проверка, а вдруг там находиться картинка или наоборот. Если этой проверки не производить, то программа после запуска ещё не будет знать, что находится в буфере обмена, пока он не измениться и программа не получит соответствующего сообщения.

Вот теперь на этом всё. Пример рабочей программы ты можешь увидеть на рисунке 23.3.3.На этом рисунке я вставил в нашу программу изображение иерархии объекта TPersistent. Попробуй запустить свой вариант программы и последить за кнопкой «Вставить». Запусти любые другие программы и попробуй в них поместить в буфер данные разного типа. Как только ты поместишь туда картинку, так сразу же твоя программа отреагирует на это и сделает кнопку «Вставить» активной.

На компакт диске, в директории \Примеры\Глава 23\Image ты можеш ь увидет ь пример это й программы.

23.4 Создание собственного формата для работы с буфером.

редставь себе ситуацию, когда в твоей программе есть какой-то объект и нужно дать пользователю возможность копировать её в буфер и вставлять в нужное место. Стандартные форматы данных для буфера CF_TEXT,

CF_BITMAP, CF_METAFILEPICT, и так далее не подходят, но данные копировать надо. Лично я с такой ситуацией встречаюсь практически в каждой своей программе. В таких случаях нужно создать свой собственный формат данных, с которым и будет работать буфер обмена.

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

Итак, создай новый проект и сразу же создай в нём новый модуль (File->New->Unit). Delphi создаст пустой модуль, который мы сохраним под именем ClipboardFormatUnit. Результат – модуль вот с таким вот содержимым:





Дата публикования: 2014-11-29; Прочитано: 194 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...