Буфер обмена ОС
Клиентский модуль для работы с буфером обмена операционной системы из 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 и выше.