рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Begin if Clipboard.HasFormat(CF_BITMAP) then

Begin if Clipboard.HasFormat(CF_BITMAP) then - раздел Программирование, Буфер обмена и стандартные компоненты Delphi Begin Pastebutton.enabled := True; Break; ...

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. Попробуй запустить свой вариант программы и последить за кнопкой «Вставить». Запусти любые другие программы и попробуй в них поместить в буфер данные разного типа. Как только ты поместишь туда картинку, так сразу же твоя программа отреагирует на это и сделает кнопку «Вставить» активной.

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

 

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

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

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

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

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

– Конец работы –

Эта тема принадлежит разделу:

Буфер обмена и стандартные компоненты Delphi

Глава Буфер обмена...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Begin if Clipboard.HasFormat(CF_BITMAP) then

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Private
{ Private declarations } FClipboardOwner:HWnd; procedure WMDrawClipboard(var Msg: TWMDrawClipboard); message WM

TLineClipboard=class
public LineData:TLineData; procedure CopyToClipboard; procedure PasteFromClipboard; end; Структура TLineData состоит из пяти полей. Именно

Procedure TForm1.CopyButtonClick(Sender: TObject); var
LineClipboard:TLineClipboard; begin LineClipboard:=TLineClipboard.Create; LineClipboard.LineData.Name:=StringGrid1.Cells[0, StringGrid1.Row]; LineClipboard.LineDat

If Clipboard.HasFormat(CF_PERSONDATA) then
begin LineClipboard.PasteFromClipboard; StringGrid1.Cells[0, StringGrid1.Row]:=LineClipboard.LineData.Name; StringGrid1.Cells[1, StringGrid1.Row]:=LineClipboard.LineData.LastName; StringGri

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги