Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Delphi работа с буфером обмена

Работа с буфером обмена

Здравствуйте, в этой статье я хотел бы поговорить про то как в своих приложениях можно использовать буфер обмена. Вообще как бы буфер обмена предназначен для временно хранения данных, поэтому в буфер обмена мы можем как записывать информацию, так и получать из него эту самую информацию. Вообще например в нашем случае можно использовать буфер в качестве например программы, которая будет закачивать на сервер какой-нибудь файл. То есть мы выбираем файл и просто выделяем его и нажимаем в Windows например Ctrl+C или в контекстном меню выбираем пункт «Копировать», а затем программа проверяет буфер обмена, если в нем есть что-то, то начинает закачивать, ну это я так как пример привел, а так мы будем знакомится с методами и свойствами класса, который отвечает за работу с буфером обмена. В Delphi за работу с буфером обмена отвечает модуль Clipbrd, да именно его необходимо подключить в Uses, конечно я думаю есть и другие модули, но этот по крайней мере стандартный и можно его спокойно подключать в Uses.

После того как мы подключим данный модуль, нам необходимо создать переменную класса TClipboard. После объявления нам ее необходимо создать. Но давайте пока что просто поговорим о свойствах и методах данного класса.

  • AsText — рассматривает буфер обмена как текстовую строку, с помощью данного свойства мы можем получить из буфера текст, если он там конечно находится
  • FormatCount — возвращает общее количество форматов, хранящиеся в буфере. То есть это свойства определяет номер формата, который сейчас в буфере, если картинка, то например 3, если текст, то например 4 и так далее. Тип — Integer
  • Formats[Index:Integer]:Dword — Открывает доступ к формату, указанному индексом Index. То естаь мы можем например если в буфере находятся и картинка и другой какой-нибудь файл, то можно прочитать именно картинку, если только она там есть

Ну вот и все по свойствам, теперь перейдем к методам

  • Assign — копирует изображение в буфер
  • Clear — тут думаю и комментировать не надо, очищает буфер
  • Close — закрывает буфер обмена
  • GetTextBuf(Buffer:Pchar,Bufsize:integer) — копирует из буфера Byfsize символов и возвращает действительное количество скопированных символов
  • HasFormat(Format:Word) — возвращает True если буфер содержит данные в формате Format
  • Open — открывает буфер обмена
  • SetTextBuf(Buffer:Pchar) — помещает в буфер обмена текстовое значение

Во многих компонентах есть свойства, которые позволяет помещать данные в буфер, да и вообще работать с буфером обмена. Например TMemo, TEdit, TRichEdit есть такие методы как CopyToClipboard, CutToClipboard, PasteFromToClipboard. В TImage также имеются методы для вставки и копирования изображения в буфер и наооборот, на сейчас мы только работаем с TClipboard.

Давайте вставим теперь текст в буфер обмена

Но для начала создадим переменную класса TClipboard на OnCreate формы

А вот теперь можно приступить к работе с буфером, добавляем текст в буфер

Clipboard. Наблюдение за буфером обмена Windows.

14.02.2013, 19:08

Слежение за буфером обмена Windows.
Привет всем друзья. Мне нужно реализовать простенькую программу которая заносит в базу.

наблюдение за буфером обмена
правильно ли я сделал и все понял? #include «resource.h» #include LRESULT CALLBACK.

Работа с Буфером обмена (Clipboard)
Всем привет! Ребята, в простом не могу найти решение. Подскажите, почему не работает. Мне нужно.

Буфер обмена (ClipBoard)
У кого есть исходники, для работы с буферам и картинками, кому не жалко поскидайте. Спасибо )

14.02.2013, 19:122

Gudzik11, Для того, чтобы отправить в БО некоторый текстовый фрагмент, нужно использовать свойство AsText объекта Clipboard. Если мы хотим, к примеру, отправить текст, хранящийся в переменной SomeStringData в БО, то следует использовать такой код (всё, что было в БО до этого, будет уничтожено):

Читать еще:  Как поставить картинку на сайт html

Чтобы получить текст из Буфера Обмена, следует делать так:

Delphi
Delphi
14.02.2013, 21:42 [ТС]3
14.02.2013, 22:154
16.02.2013, 22:55 [ТС]5
Delphi
17.02.2013, 01:406
17.02.2013, 02:027
Вложения

Delphi
ClipboardMonitor-01.rar (170.3 Кб, 205 просмотров)
17.02.2013, 11:53 [ТС]8

Можете написать как это должно выглядеть ?
Искал в интернете там все пишут что нужно сторонний компонент использовать.

Добавлено через 1 час 46 минут
Спасибо разобрался!

Delphi
17.02.2013, 12:339

Gudzik11, я бы использовал один TListBox:

Delphi

Описание класса TMyStr есть здесь: Listbox и 1 нюанс

Единственное, о чем не надо забывать теперь — это освобождать Objects при удалении айтемов, и при завершении работы программы, иначе будут утечки памяти.

Delphi
17.02.2013, 13:11 [ТС]10

TMyStr.Create(s)
ошибку выдаёт не может поместить туда S

правильно я класс создал

Delphi
17.02.2013, 13:1911
Delphi
17.02.2013, 14:09 [ТС]12
17.02.2013, 14:5013

Когда надо вставить текст в буфер обмена — делаешь

Delphi
17.02.2013, 15:06 [ТС]14

Нет нужно при ctrl+V или через меню вставить чтоб программа давала выбрать что вставить из listbox

Добавлено через 2 минуты
Как то можно перехватить это действие в виндовс ?

19.02.2013, 01:06 [ТС]15

Так и не нашёл я как сделать чтоб к примеру в блокнот можно было скопировать по нажатию ctrl+shift+V

но по нажатию комбинации клавиш происходит копирование в тот жэ ListBox

Подскажите как правильно сделать

Delphi
19.02.2013, 01:06
19.02.2013, 01:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Буфер обмена Clipboard
Программа должна отслеживать все копирования в буфер и сохранять «историю» работы с буфером обмена.

Qt работа с буфером обмена
Доброго времени суток форумчане. Мне необходимо написать скрипт(программу) которая бы позволяла.

Работа с буфером обмена
Всем привет .. Помогите пожалуйста . Работаю на QT под Линукс . Как мне записать информацию в.

Работа с буфером обмена
Подскажите. Есть ли возможность реализовать следующее: Файлы пдф, тиф, джипе хранятся в базе в.

Простое руководство к выполнению операции с буфером обмена в Delphi

Буфер обмена Windows представляет собой контейнер для любого текста или графики, которые разрезаются, скопированных или вставленных из или в приложение. Эта статья покажет вам, как использовать объект TClipboard для реализации функции вырезать-копировать-вставить в приложении Delphi.

Буфер обмена в общем

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

TClipboard

Для того , чтобы использовать буфер обмена Windows в наших приложениях, необходимо добавить блок ClipBrd к статье изез проекта, за исключением того, когда мы ограничиваем Вырезание, копирование и вставка на компоненты , уже обладая встроенной поддержкой Clipboard методов. Эти компоненты TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage и TDBMemo.

Блок ClipBrd автоматически представляет собой объект TClipboard под названием Буфер обмена. Мы будем использовать CutToClipboard , CopyToClipboard , PasteFromClipboard , Четкие и HasFormat методы борьбы с буфером обмена и текста / графики манипуляции.

Отправка и получение текста

Для того , чтобы отправить текст в буфер обмена свойство AsText объекта Clipboard используется. Если мы хотим, например, чтобы отправить строку информацию , содержащуюся в переменной SomeStringData в буфер обмена (уничтожая все , что текст был там), мы будем использовать следующий код:

Чтобы извлечь текстовую информацию из буфера обмена, мы будем использовать

Примечание: если мы хотим, чтобы скопировать текст из, скажем, Edit компонент в буфер обмена, мы не должны включать в себя блок ClipBrd в пункте использования. Метод CopyToClipboard из TEdit копирует выделенный текст в поле редактирования в буфер обмена в формате CF_TEXT.

Буфер обмена изображения

Чтобы получить графические изображения из буфера обмена, Delphi должна знать, какой тип изображения хранится там. Кроме того, для передачи изображений в буфер обмена, приложение должно сказать, буфер обмена, какой тип графики он отправляет. Некоторые из возможных значений параметра Format следует; Есть много больше форматов, предоставляемого Windows.

  • CF_TEXT — Текст с каждой строкой , которая заканчивается CR-LF комбинацией.
  • CF_BITMAP — Растровое изображение Windows.
  • CF_METAFILEPICT — Метафайл графический Windows.
  • CF_PICTURE — Объект типа TPicture.
  • CF_OBJECT — Любой хранимый объект.

Метод HasFormat возвращает истину, если в буфере обмена имеет правильный формат:

Используйте Присвоить метод для отправки (назначить) изображение в буфер обмена. Например, следующий код копирует растровые из растрового объекта с именем MyBitmap в буфер обмена:

В общем, MyBitmap является объектом типа TGraphics, TBitmap, TMetafile или TPicture.

Чтобы получить изображение из буфера обмена, мы должны: проверить текущий формат содержимого буфера обмена и использовать Присвоить метод целевого объекта:

Подробнее Clipboard управления

Буфер обмена хранит информацию в различных форматах, так что мы можем передавать данные между приложениями, использующими различные форматы. При чтении информации из буфера обмена с классом TClipboard Delphi, мы ограничены стандартными форматы буфера обмена: текст, рисунки и метафайлы.

Предположим , вы работаете между двумя различными приложениями Delphi; как бы вы определить пользовательский формат буфер обмена для отправки и получения данных между этими двумя программами? Для целей исследования, скажем , вы пытаетесь закодировать Вставить пункт меню . Вы хотите, чтобы быть отключена , если нет текста в буфер обмена (как пример).

Поскольку весь процесс с буфером обмена происходит за кулисами, не существует метода TClipboard класса, который сообщит вам, когда некоторые изменения в содержании буфера обмена имеет место. Идея заключается в том, чтобы подключить в системе уведомлений буфера обмена, так что вы сможете получить доступ и реагировать на события, когда изменения в буфере обмена.

Чтобы обладать большей гибкостью и функциональностью, имея дело с буфером обмена уведомлений об изменениях и пользовательских форматов буфера обмена — прослушивание в буфер обмена — это необходимо.

Буфер обмена

Как работать с буфером обмена (clipboard)?

Этот пример использует картинку, кнопку и компонент shape на форме. Когда пользователь кликает по кнопке, то изображение формы сохраняется в в переменной FormImage и копируется в буфер обмена (Clipboard). Затем изображение формы копируется обратно в компонент картинки, тем самым создавая интересный эффект, особенно, если кнопку понажимать несколько раз.

Копирование в буфер обмена

procedure CopyButtonClick(Sender: TObject);

if ActiveControl is TMemo then

if ActiveControl is TDBMemo then

if ActiveControl is TEdit then

if ActiveControl is TDBedit then

procedure PasteButtonClick(Sender: TObject);

if ActiveControl is TMemo then

if ActiveControl is TDBMemo then

if ActiveControl is TEdit then

if ActiveControl is TDBedit then

Просмотр буфера обмена

Просмотр буфера обмена.

Пример на основе простого модуля-класса, осуществляющего просмотр буфера обмена.

Как программно реализовать Cut, Copy и Paste?

Следущие операции производятся с активным контролом на форме:

procedure TForm1.Cut1Click(Sender: TObject);

SendMessage (ActiveControl.Handle, WM_Cut, 0 , 0 );

procedure TForm1.Copy1Click(Sender: TObject);

SendMessage (ActiveControl.Handle, WM_Copy, 0 , 0 );

procedure TForm1.Paste1Click(Sender: TObject);

SendMessage (ActiveControl.Handle, WM_Paste, 0 , 0 );

Если Вы разрабатываете приложение MDI, то необходимо отправлять сообщение в активное дочернее окно, т.е. использовать: ActiveMDIChild.ActiveControl.Handle

Hook на буфер обмена

*Просто создайте новую форму и назовите его ClipFormats.

*Поместите TButton и вызывай его btnUpdate.

*Поместите лист бокс и вызывай его lbFormats.

Затем просто добавьте приведенный ниже код и подключить все обработчики событий.

Все это делает дисплей в настоящее время все форматы в буфере обмена и

обновления как только изменения буфера обмена.

Как удобнее работать с буфером обмена как с последовательностью байт?

interface uses Classes, Windows;

TClipboardStream = class (TStream)

constructor Create(fmt : word);

destructor Destroy; override ;

function Read ( var Buffer; Count : Longint) : Longint; override ;

function Write ( const Buffer; Count : Longint) : Longint; override ;

function Seek(Offset : Longint; Origin : Word) : Longint; override ;

implementation uses SysUtils;

constructor TClipboardStream.Create(fmt : word);

MoveMemory(FMemory, tmp, FSize);

function TClipboardStream. Read ( var Buffer; Count : longint) : longint;

if FPosition + Count > FSize then

Result := FSize — FPosition

MoveMemory(@Buffer, PChar(FMemory) + FPosition, Result);

function TClipboardStream. Write ( const Buffer; Count : longint) : longint;

ReallocMem(FMemory, FPosition + Count);

MoveMemory(PChar(FMemory) + FPosition, @Buffer, Count);

FPosition := FPosition + Count;

FHandle := GlobalAlloc(GMEM_MOVEABLE or GMEM_SHARE or GMEM_ZEROINIT, FSize);

MoveMemory(tmp, FMemory, FSize);

function TClipboardStream.Seek(Offset : Longint; Origin : Word) : Longint;

0 : FPosition := Offset;

1 : Inc(FPosition, Offset);

2 : FPosition := FSize + Offset;

Alexey Mahotkin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. (2:5020/433)

Взято из FAQ: Delphi and Windows API Tips’n’Tricks

Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Сэмулировать нажатие клавиш для копии и вставки из буфера

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0 ), 0 , 0 );

keybd_event(Ord( ‘C’ ), MapVirtualKey(Ord( ‘C’ ), 0 ), 0 , 0 );

keybd_event(Ord( ‘C’ ), MapVirtualKey(Ord( ‘C’ ), 0 ), KEYEVENTF_KEYUP, 0 );

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0 ), KEYEVENTF_KEYUP, 0 )

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0 ), 0 , 0 );

keybd_event(Ord( ‘V’ ), MapVirtualKey(Ord( ‘V’ ), 0 ), 0 , 0 );

keybd_event(Ord( ‘V’ ), MapVirtualKey(Ord( ‘V’ ), 0 ), KEYEVENTF_KEYUP, 0 );

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0 ), KEYEVENTF_KEYUP, 0 )

Контроль за изменением содержимого буфера обмена

Приложение может быть уведомлено об изменениях в данных, хранящихся в

Буфер обмена Windows, зарегистрировавшись как средство просмотра буфера обмена.

Скопировать HTML-код в буфер обмена

Если вы когда-нибудь пробовали вставлять html в буфер обмена, используя обычный CF_TEXT

формате, то вы, возможно, были разочарованы, обнаружив, что визуальный HTML-код

редакторы вставляют ваше предложение, как если бы это был только текст,

вместо того, чтобы распознавать его как html. Для этого нужен формат CF_HTML.

CF_HTML полностью текстовый формат и использует формат преобразования UTF-8.

Он включает в себя описание контекста, и в контексте фрагмента.

Использование интерфейса OLE

Использование интерфейса OLE

Значение, которое придается сегодня внедрению интерфейса OLE, трудно переоценить. Фирма Microsoft извещает о том, что на получение логотипа «Windows 95 Compatible» будут сертифицированы только те приложения, которые имеют средства работы с OLE.

Разъяснять суть механизмов OLE с точки зрения пользователя здесь не имеет смысла; кратко опишем их с точки зрения программиста.

Сохранение данных в Clipboard

Мне нужно использовать clipboard для сохранения данных в собственном формате и я хочу для этого написать набор процедур ввода/вывода с использованием потоков (streams). Возможно ли создать объект TMemoryStream, эаполнить его и поместить в Clipboard?

Ссылка на основную публикацию
Adblock
detector