Получить цвет RGB в диалоге 1С 8.3 (такси)

1. 29.11.14 17:23 Сейчас в теме
Здравствуйте
Никак не могу разораться :(

В форме создаю диалог выбора цвета, и выбранный цвет записываю в реквизит как строку. Но потом работать с названием этого цвета у меня не очень получается. Хочу получить цвет в виде RGB, но в передаваемом параметре “Результат” – красный, синий, зеленый имеют значение “-1”

&НаКлиенте
Процедура ВыборЦветаФона(Команда) Экспорт
	ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета;
    Оповещение = Новый ОписаниеОповещения("ВыборЦветаЗавершение", ЭтотОбъект);
    ДиалогВыбораЦвета.Показать(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ВыборЦветаЗавершение(Результат, ДополнительныеПараметры) Экспорт
    Если НЕ Результат = Неопределено Тогда
		Элементы.Наименование.ЦветФона = Результат;
		Объект.ЦветФона = Результат;
	КонецЕсли;	
КонецПроцедуры

Показать
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. THXO 29.11.14 20:24 Сейчас в теме
при царе Горохе писал и расместил в общем модуле клиент-сервер, потести, мож работает

//----------- Методы типа данных "Цвет"

//
// 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);
	Иначе	
		Красный = КрПоУмолчанию;
		Зеленый = ЗлПоУмолчанию;
		Синий   = СнПоУмолчанию;
	КонецЕсли;
	
	Возврат Новый Цвет(Красный, Зеленый, Синий);
	
КонецФункции
Показать
tormozit; Pavel_nv; ASysuev; Octopus; +4 Ответить
6. unduty 20.12.19 19:32 Сейчас в теме
(2) Прошу поделиться функцией преобразовать в число
3. profnet 29.11.14 21:47 Сейчас в теме
Огромное спасибо. Да, все работает... но как то это странно... глупо что нет функции встроенной у 1С...
4. Lo1jke 12.10.18 18:36 Сейчас в теме
Мучался какое-то время пока не нашел просто решение:

На форме реквизит Поле ввода с Типом значения: Цвет.

Перед записью элемента:

ЦветЭлемента = ЗначениеВСтрокуВнутр(ЭлементыФормы.ЦветШрифта.Значение);


где ЦветЭлемента - реквизит Строка Неограниченной длины.

ПриОткрытии:

ЭлементыФормы.ЦветШрифта.Значение = ЗначениеИзСтрокиВнутр(ЦветЭлемента);


Может кому-то поможет.
metis76; w1ld32; acanta; +3 Ответить
5. DarkUser 12.10.18 19:32 Сейчас в теме
Зачем вообще такие сложности? Хранить цвет нужно в сериализованном (xml) виде, а наименование присваивать либо по названию стиля либо указывать пользовательское.
Оставьте свое сообщение
Вопросы с вознаграждением