Работа с буфером обмена
Работа с буфером обмена
Работа с буфером обмена Кнопки Вставить и Вырезать есть практически во все приложения под Windows, вы наверное тоже хотите реализовать что-то подобное в своей программе, тогда эта тема для вас Буфер обмена и стандартные компоненты Delphi Многие компоненты Delphi уже готовы к работе с буфером обмена, это касается компонентов, которые содержат какие-нибудь данные, которые пользователь может поместить в буфер обмена (например TMemo, TRichEdit и т.п.). Эти компоненты имеют методы : CutToClipboard //Вырезать в буфер обмена CopyToClipboard //Копировать в буфер обмена PasteFromClipboard //Вставить из буфера обмена Ф-ция Clipboard Для работы с буфером обмена в Delphi есть ф-ция Clipboard, возвращающая экземпляр класса Clipboard, для работы с ней надо в uses прописать модуль Clipbrd и ф-ция становится доступной. А теперь о работе с Clipboard : Метод SetTextBuf() Этот метод копирует текст, преданный в качестве параметра, в буфер обмена. Надо помнить, что текст передаваемый в качестве параметра должен иметь тип PChar, так что не забывайте переводить строки. Пример : Clipboard.SetTextBuf(PChar(memo1.SelText)); В примере мы копируем в буфер обмена текст, выделеные в Memo. Для того, чтобы осуществить работу кнопки Вырезать напишем тот же код, но после копирования в буфер, удалим этот текст в Memo. Пример : Clipboard.SetTextBuf(PChar(Memo1.SelText)); Memo1.SelText := ''; Свойство AsText Это свойство возвращает содержимое буфера обмена в виде строки. С помощью этого свойства можно осуществить работу кнопки Вставить. Пример : Memo1.SelText := Clipboard.AsText; В примере мы в Memo копируем содержимое буфера обмена. Метод Assign C помощью метода Assign можно скопировать в буффер обмена объекты типа TPicture и TGraphic. Соответственно с помощью метода Assign объектов TPicture, TBitmap и TMetafile можно копировать в эти объекты содержимое буффера. Например так можно скопировать картинку через буффер: Clipboard.Assign(Image1.Picture); Image2.Picture.Assign(Clipboard); Метод Clear Очищает содержимое буфера обмена. Метод HasFormat() Проверить какого формата данные находятся в буфере обмена. Возможные типы : CF_TEXT - буфер содержит текст CF_BITMAP - буфер содержит изображение CF_METAFILEPICT - буфер содержит векторное изображение CF_PICTURE - буфер содержит обьект типа TPicture CF_COMPONENT - буфер содержит компонент Пример : procedure TForm1.Button1Click(Sender: TObject); begin if Clipboard.HasFormat(CF_TEXT) then ShowMessage('буфер содержит текст'); if Clipboard.HasFormat(CF_BITMAP) then ShowMessage('буфер содержит изображение'); if Clipboard.HasFormat(CF_METAFILEPICT) then ShowMessage('буфер содержит векторное изображение'); if Clipboard.HasFormat(CF_PICTURE) then ShowMessage('буфер содержит обьект типа TPicture'); if Clipboard.HasFormat(CF_COMPONENT) then ShowMessage('буфер содержит компонент'); end; В примере при нажатии кнопки выводится сообщение о том, что содержится в буфере обмена. Автор: Kanes jack128 Сообщ. #2 от 26.05.06, 09:16 ********************************************************************************* Как скопировать русский текст в буфер обмена procedure CopyStringToClipboard(const Value: String); const RusLocale = (SUBLANG_DEFAULT shl $A) or LANG_RUSSIAN; var hMem: THandle; pData: Pointer; begin Clipboard.Open; try Clipboard.AsText := Value; hMem := GlobalAlloc(GMEM_MOVEABLE, SizeOf(DWORD)); try pData := GlobalLock(hMem); try DWORD(pData^) := RusLocale; finally GlobalUnlock(hMem); end; Clipboard.SetAsHandle(CF_LOCALE, hMem); finally GlobalFree(hMem); end; finally Clipboard.Close; end; end;