Перейти к основному содержимому

Буфер обмена ОС

Клиентский модуль для работы с буфером обмена операционной системы из 1С. Автоматически выбирает подходящий механизм в зависимости от версии платформы: на платформе 8.3.24+ используется встроенное средство СредстваБуфераОбмена, на более ранних версиях — внешняя компонента VanessaExt (github.com/lintest/VanessaExt).

  • Модуль: УИ_БуферОбменаКлиент
  • Репозиторий модуля: github.com/cpr1c/clipboard_1c
  • Внешняя компонента: VanessaExt — AddIn.VanessaExt.ClipboardControl
  • Лицензия: Apache 2.0
к сведению

Модуль автоматически определяет доступный механизм. Если платформа 8.3.24+ — используется СредстваБуфераОбмена, иначе — внешняя компонента VanessaExt (ClipboardControl) с автоматической установкой при первом вызове.

Методы​

Все операции записи в буфер обмена и чтения из него — асинхронные. Результат возвращается через ОписаниеОповещения.

ВерсияПодсистемы()​

Возвращает текущую версию подсистемы.

Возвращаемое значение: Строка — версия подсистемы (например, "2.0.2").


ДоступноИспользованиеПлатформенныхВозможностей()​

Проверяет, доступен ли встроенный платформенный механизм СредстваБуфераОбмена (требуется платформа 8.3.24+).

Возвращаемое значение: Булево — Истина, если платформенный буфер обмена доступен.


НачатьОчисткуБуфераОбмена(ОписаниеОповещения)​

Очищает содержимое буфера обмена.

Параметры:

  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <РезультатОчистки> — Булево. Неопределено, если не удалось подключить компоненту.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.

НачатьКопированиеСтрокиВБуфер(СтрокаКопирования, ОписаниеОповещения)​

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

Параметры:

  • СтрокаКопирования — Строка. Текст, который необходимо скопировать в буфер обмена.
  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <Результат> — Булево. Неопределено, если не удалось подключить компоненту.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.

НачатьПолучениеСтрокиИзБуфера(ОписаниеОповещения)​

Получает строку из буфера обмена.

Параметры:

  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <Результат> — Строка. Текст из буфера обмена. Неопределено, если не удалось подключить компоненту.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.

НачатьКопированиеКартинкиВБуфер(Картинка, ОписаниеОповещения)​

Помещает картинку в буфер обмена.

Параметры:

  • Картинка — Картинка, Строка (адрес во временном хранилище) или ДвоичныеДанные.
  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <Результат> — Булево. Неопределено, если не удалось подключить компоненту.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.

НачатьПолучениеКартинкиИзБуфера(ОписаниеОповещения, ВариантПолучения = "Картинка")​

Получает картинку из буфера обмена.

Параметры:

  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <ДанныеКартинки> — значение в запрошенном формате. Неопределено, если не удалось подключить компоненту или в буфере нет картинки.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.
  • ВариантПолучения — Строка (необязательный, по умолчанию "Картинка"). Определяет формат результата:
    • "Картинка" — значение типа Картинка.
    • "ДвоичныеДанные" — двоичные данные картинки в PNG.
    • "Адрес" — строка — адрес во временном хранилище.

НачатьПолучениеФорматаБуфераОбмена(ОписаниеОповещения)​

Получает описание формата данных, находящихся в буфере обмена.

Параметры:

  • ОписаниеОповещения — ОписаниеОповещения. Процедура-обработчик получает:
    • <Результат> — Строка в формате JSON с описанием содержимого (например, "Текст", "Картинка", "HTML"). Неопределено, если не удалось подключить компоненту.
    • <ДополнительныеПараметры> — значение, переданное при создании ОписаниеОповещения.

Примеры​

Копирование строки в буфер обмена​

Процедура СкопироватьТекстВБуфер(Команда)

ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииКопированияТекста", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьКопированиеСтрокиВБуфер("Текст для копирования", ОписаниеОповещения);

КонецПроцедуры

Процедура ПриЗавершенииКопированияТекста(Результат, ДополнительныеПараметры) Экспорт
Если Результат Тогда
Сообщить("Текст скопирован в буфер обмена");
Иначе
Сообщить("Не удалось скопировать текст");
КонецЕсли;
КонецПроцедуры

Получение текста из буфера обмена​

Процедура ВставитьТекстИзБуфера(Команда)

ОписаниеОповещения = Новый ОписаниеОповещения("ПриПолученииТекстаИзБуфера", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьПолучениеСтрокиИзБуфера(ОписаниеОповещения);

КонецПроцедуры

Процедура ПриПолученииТекстаИзБуфера(ТекстИзБуфера, ДополнительныеПараметры) Экспорт
Если ТекстИзБуфера <> Неопределено Тогда
ПолеВвода.Значение = ТекстИзБуфера;
КонецЕсли;
КонецПроцедуры

Копирование и получение картинки​

Процедура СкопироватьКартинкуВБуфер(Команда)

Картинка = ПолеКартинки.Значение;
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииКопированияКартинки", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьКопированиеКартинкиВБуфер(Картинка, ОписаниеОповещения);

КонецПроцедуры

Процедура ПриЗавершенииКопированияКартинки(Результат, ДополнительныеПараметры) Экспорт
Сообщить(?(Результат, "Картинка скопирована", "Ошибка копирования картинки"));
КонецПроцедуры
Процедура ВставитьКартинкуИзБуфера(Команда)

ОписаниеОповещения = Новый ОписаниеОповещения("ПриПолученииКартинкиИзБуфера", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьПолучениеКартинкиИзБуфера(ОписаниеОповещения, "ДвоичныеДанные");

КонецПроцедуры

Процедура ПриПолученииКартинкиИзБуфера(ДанныеКартинки, ДополнительныеПараметры) Экспорт
Если ДанныеКартинки <> Неопределено Тогда
ПолеКартинки.Значение = Новый Картинка(ДанныеКартинки);
КонецЕсли;
КонецПроцедуры

Очистка буфера обмена​

Процедура ОчиститьБуфер(Команда)

ОписаниеОповещения = Новый ОписаниеОповещения("ПриОчисткеБуфера", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьОчисткуБуфераОбмена(ОписаниеОповещения);

КонецПроцедуры

Процедура ПриОчисткеБуфера(Результат, ДополнительныеПараметры) Экспорт
Сообщить(?(Результат, "Буфер обмена очищен", "Не удалось очистить буфер обмена"));
КонецПроцедуры

Проверка формата данных в буфере​

Процедура ПроверитьФорматБуфера(Команда)

ОписаниеОповещения = Новый ОписаниеОповещения("ПриПолученииФормата", ЭтотОбъект);
УИ_БуферОбменаКлиент.НачатьПолучениеФорматаБуфераОбмена(ОписаниеОповещения);

КонецПроцедуры

Процедура ПриПолученииФормата(Формат, ДополнительныеПараметры) Экспорт
Если Формат = "Картинка" Тогда
Сообщить("В буфере обмена находится картинка");
ИначеЕсли Формат = "Текст" Тогда
Сообщить("В буфере обмена находится текст");
ИначеЕсли ПустаяСтрока(Формат) Тогда
Сообщить("Буфер обмена пуст");
КонецЕсли;
КонецПроцедуры

Поддерживаемые платформы​

ОСМеханизм
WindowsВнешняя компонента VanessaExt — ClipboardControl (Native) / СредстваБуфераОбмена (8.3.24+)
LinuxКак и Windows, но для картинок всегда используется внешняя компонента
macOSТолько СредстваБуфераОбмена (8.3.24+)

Требования: платформа 1С версии 8.3.14 и выше.