Картинку в Буфер обмена

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Я ж говорю, что там есть какой-то заголовок. Его надо расшифровать и можно пользоваться... =)
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

ЕМНИП, у гимпа свой собственный буфер обмена, чтобы вставить из системного надо выбирать функцию импорта (Acquire...) По крайней мере под виндовс вроде так было...
dalfy
новенький
Сообщения: 12
Зарегистрирован: 07.10.2021 19:47:01

Сообщение dalfy »

EmeraldMan писал(а):Дело в том, что помимо данных в буфере хранится тип данных. Так вот, как буферу указать что там хранится ссылка на файл, а не текст?
Как у Вас получилось? Мне тоже надо скопировать файл.
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

Есть такой модуль Clipbrd.
Надо зарегистрировать свой формат или проверить и зарегистрировать какой нужно.
И там объявлен класс TClipboard и метод RegisterClipboardFormat.
Это все что нужно, а... Еще функция Clipboard, потому, что для каждой оси объявлена по разному, видимо. В Дельфи это было переменной потому что только для винды. В общем, разобраться не сложно.

Вот так я это очень давно делал в Дельфи:
var CF_COMPONENTS: Word;

...

initialization
CF_COMPONENTS := RegisterClipboardFormat('Delphi Components');

function TUnClipboard.CanPaste: boolean;
begin
try
Result:=Clipboard.HasFormat(CF_COMPONENTS) or
(Clipboard.HasFormat(CF_TEXT) and PossibleStream(Clipboard.AsText));
except
Result := False;
end;
end;

и т.д. и т.п. Сейчас посмотрел клирбоард Лазаруса - так там все написано лучше Делфей в мою бытность - только дергай готовые функции. Примеры можно взять из текстовых редакторов для текста. Бинарный примерно так же, только клипбоард надо получить согласно зарегистрированному формату вашему.
Напрмер:
function TClipboard.SetFormat(FormatID: TClipboardFormat; Stream: TStream): Boolean;

Добавлено спустя 3 минуты 29 секунд:
function TClipboard.GetFormat(FormatID: TClipboardFormat; Stream: TStream): Boolean;
Ответить