Получить цвет RGB в диалоге 1С 8.3 (такси)
Здравствуйте
Никак не могу разораться :(
В форме создаю диалог выбора цвета, и выбранный цвет записываю в реквизит как строку. Но потом работать с названием этого цвета у меня не очень получается. Хочу получить цвет в виде RGB, но в передаваемом параметре “Результат” – красный, синий, зеленый имеют значение “-1”
Никак не могу разораться :(
В форме создаю диалог выбора цвета, и выбранный цвет записываю в реквизит как строку. Но потом работать с названием этого цвета у меня не очень получается. Хочу получить цвет в виде RGB, но в передаваемом параметре “Результат” – красный, синий, зеленый имеют значение “-1”
&НаКлиенте
Процедура ВыборЦветаФона(Команда) Экспорт
ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета;
Оповещение = Новый ОписаниеОповещения("ВыборЦветаЗавершение", ЭтотОбъект);
ДиалогВыбораЦвета.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЦветаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если НЕ Результат = Неопределено Тогда
Элементы.Наименование.ЦветФона = Результат;
Объект.ЦветФона = Результат;
КонецЕсли;
КонецПроцедуры
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
при царе Горохе писал и расместил в общем модуле клиент-сервер, потести, мож работает
//----------- Методы типа данных "Цвет"
//
// Add_ComM_ОАС_КС.ПолучитьАбсолютныйЦвет(ИсходныйЦвет);
//
Функция ПолучитьАбсолютныйЦвет(ИсходныйЦвет) Экспорт
Если ИсходныйЦвет.Вид = ВидЦвета.Абсолютный Тогда
Возврат ИсходныйЦвет;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет;
ТабДок.Записать("ПреобразованиеЦвета.mxl", ТипФайлаТабличногоДокумента.MXL7);
ТабДок.Прочитать("ПреобразованиеЦвета.mxl");
АЦвет = ТабДок.Область("R1C1").ЦветФона;
Возврат АЦвет;
КонецФункции
//
// Add_ComM_ОАС_КС.ПолучитьСтроку10АбсолютногоЦвета(АЦвет);
//
Функция ПолучитьСтроку10АбсолютногоЦвета(АЦвет) Экспорт
// Форматная строка составляющей цвета
ФсСц = "ЧЦ=3; ЧН=; ЧВН=; ЧГ=";
// Допустим, что АЦвет равен (0, 0, 0) или (24, 15, 255). Где составляющие цвета - это числа
RGB10 =
Формат(АЦвет.Красный, ФсСц) + "," +
Формат(АЦвет.Зеленый, ФсСц) + "," +
Формат(АЦвет.Синий , ФсСц);
// Для примера выше получим строки "000,000,000" или "024,015,255", т.е. строго фиксированные строки.
Возврат RGB10;
КонецФункции
//
// Add_ComM_ОАС_КС.ПолучитьАбсолютныйЦветИзСтроки10(RGB10);
//
// RGB10 = это строка в формате "ККК,ЗЗЗ,ССС"
// Где ККК: десятичное число Красной составляющей цвета, строкой
// Где ЗЗЗ: десятичное число Зеленой составляющей цвета, строкой
// Где ССС: десятичное число Синей составляющей цвета, строкой
//
// Проверка правильного формата строки составляющих цвета в этом методе не производится,
// т.к. задавать правильный формат нужно при сохранении этой строки в различных объектах
// см. метод ПолучитьСтроку10АбсолютногоЦвета(АЦвет)
//
// Представление цвета в виде "ККК,ЗЗЗ,ССС" в отличие от шестнадцатеричного более наглядно отображается
// в условном оформлении при программном формировании элементов оформления, например,
// RGB10 = "255,255,255"
//
Функция ПолучитьАбсолютныйЦветИзСтроки10(Знач RGB10, КрПоУмолчанию = 255, ЗлПоУмолчанию = 255, СнПоУмолчанию = 255) Экспорт
// Удалим пробелы на случай если RGB10 получен из реквизита-строки с НЕ фиксированной длиной строки.
RGB10 = СокрЛП(RGB10);
Если СтрДлина(RGB10) = 11 Тогда
Красный = Мин(ПреобразоватьВЧисло(Лев (RGB10, 3)) , 255);
Зеленый = Мин(ПреобразоватьВЧисло(Сред(RGB10, 5, 3)), 255);
Синий = Мин(ПреобразоватьВЧисло(Прав(RGB10, 3)) , 255);
Иначе
Красный = КрПоУмолчанию;
Зеленый = ЗлПоУмолчанию;
Синий = СнПоУмолчанию;
КонецЕсли;
Возврат Новый Цвет(Красный, Зеленый, Синий);
КонецФункции
Показать
Мучался какое-то время пока не нашел просто решение:
На форме реквизит Поле ввода с Типом значения: Цвет.
Перед записью элемента:
где ЦветЭлемента - реквизит Строка Неограниченной длины.
ПриОткрытии:
Может кому-то поможет.
На форме реквизит Поле ввода с Типом значения: Цвет.
Перед записью элемента:
ЦветЭлемента = ЗначениеВСтрокуВнутр(ЭлементыФормы.ЦветШрифта.Значение);
где ЦветЭлемента - реквизит Строка Неограниченной длины.
ПриОткрытии:
ЭлементыФормы.ЦветШрифта.Значение = ЗначениеИзСтрокиВнутр(ЦветЭлемента);
Может кому-то поможет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот