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

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

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

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

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

Методы

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

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

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

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


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

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

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


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

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

Параметры:

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

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

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

Параметры:

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

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

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

Параметры:

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

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

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

Параметры:

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

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

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

Параметры:

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

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

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

Параметры:

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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