Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Для FormEx. Получение системных цветов Windows. (число прочтений - 7004 )
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Для FormEx. Получение системных цветов Windows.
19. Июля 2006 :: 12:14
Печать  
Код
Выбрать все
// Получим представление цвета из реестра
Функция глПолучитьСистемныйЦвет( псИдентификаторЦвета ) Экспорт
	// ИСПОЛЬЗОВАНИЕ:
	// м_СерыйЦвет = глПолучитьСистемныйЦвет( "Window" );
	//РасшАтрибут.ЦветФона = м_СерыйЦвет;
	//Если ПустоеЗначение(ЗначениеАтрибута) = 1 Тогда
	//	РасшАтрибут.ЦветФона = 255; // красный......
	//КонецЕсли;

	// идентификаторы цветов:
	// ActiveBorder - Рамка вокруг активного окна.
	//ButtonHilight, ButtonLight - Выделение трехмерных элементов.
	//AppWorkSpace - Фон окна приложения MDI (приложение, использующее многооконный интерфейс).
	//Background - Рабочий стол.
	//ButtonAlternateFace - Кнопка.
	//ButtonShadow - Тень, "отбрасываемая" кнопкой.
	//ButtonText - Текст надписи на поверхности кнопки.
	//TitleText - Текст заголовка окна, кнопки изменения размера, кнопки полосы просмотра.
	//GrayText - Текст серого цвета.
	//Hilight - Фон выбранного элемента в органе управления.
	//HilightText - Текст для выбранного органа управления.
	//InactiveBorder - Рамка вокруг неактивного окна.
	//InactiveTitle - Заголовок неактивного окна.
	//InactiveTitleText - Текст заголовка для неактивного окна.
	//InfoWindow - Фон элемента подсказка.
	//InfoText - Текст элемента подсказка.
	//Menu - Фон меню.
	//MenuText - Текст меню.
	//Scrollbar - Полоса просмотра.
	//Window - Фон окна.
	//WindowFrame - Рамка окна.
	//WindowText - Текст в окне.
	//ButtonFace,MenuBar,MenuHilight

	// НЕ НАШЕЛ КЛЮЧ РЕЕСТРА  
	//BTNHIGHLIGHT - Выбранная кнопка.
	//3DDKSHADOW - Темная тень для трехмерных элементов.
	//3DFACE, BTNFACE - Поверхности трехмерных элементов.
	//3DHILIGHT, 3DHIGHLOIGHT, Выделение трехмерных элементов.
	//3DLIGHT - Свет для трехмерных элементов.
	//COLOR3DSHADOW,BTNHIGHLIGHT - Тень для трехмерных элементов.
	//ACTIVEBORDER - Рамка вокруг активного окна.
	//ACTIVECAPTION - Заголовок активного окна.


	ЗначВозврата = -1;
	СтрокаЦвета = "";
	// глWScript_Shell = CreateObject("WScript.Shell");
	Попытка
		СтрокаЦвета =  глWScript_Shell.RegRead("HKEY_CURRENT_USER\Control Panel\Colors\"+псИдентификаторЦвета);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат ЗначВозврата;
	КонецПопытки;
	// Маска цвета будет такой: "212 208 200" (RGB), надо только разложить
	СтрокаЦвета = СтрЗаменить(СтрокаЦвета," ",",");
	СписЦветов = глСтрокаВСписок(СтрокаЦвета);
	Если СписЦветов.РазмерСписка() <> 3 Тогда
		Возврат ЗначВозврата;
	КонецЕсли;
	_Красный = Число(СписЦветов.ПолучитьЗначение(1));
	_Зеленый = Число(СписЦветов.ПолучитьЗначение(2));
	_Синий	= Число(СписЦветов.ПолучитьЗначение(3));
	ЗначВозврата = Макс(0,_Синий)*65536+Макс(0,_Зеленый)*256+Макс(0,_Красный);

	Возврат ЗначВозврата;
КонецФункции // глПолучитьСистемныйЦвет()
 

  
Наверх
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #1 - 19. Июля 2006 :: 12:19
Печать  
Хотелось бы узнать на всех ли системах сработает? И под любыми ли правами.... Интересует прежде всего 2000-к.
Проверял OS-XP; права-Админские...
  
Наверх
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #2 - 19. Июля 2006 :: 12:31
Печать  
Для чего? собственно для корректого "возвращения" цвета, после отметки о незаполненности какого-либо реквизита, с учетом системных цветов:
  

col.jpg ( 7 KB | Загрузки )
col.jpg
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #3 - 19. Июля 2006 :: 15:46
Печать  
О! а это мысль!
Век живи, век учись... Спасибо Дим Улыбка
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #4 - 19. Июля 2006 :: 16:58
Печать  
Ну сразу делай "Правильно" класс с функциями:
Код
Выбрать все
// ИСПОЛЬЗОВАНИЕ
// Перем м_КлассФормы;
//Процедура ПриЗаписи()
//	......
//	ИначеЕсли м_КлассФормы.ОКЗР_Проверить(1)=0 Тогда
//		СтатусВозврата(0); Возврат;
//	КонецЕсли;
//	.......
//КонецПроцедуры
//
//// Запихнуть в текстовое поле формы
//Функция ФункцияОбновленияФормы()
//	.......
//	м_КлассФормы.ОКЗР_Проверить(0);
//	.......
//КонецФункции // ФункцияОбновленияФормы()
//
//м_КлассФормы = СоздатьОбъект("ДокументФорма_Экс");
//м_КлассФормы.Инициализация( Контекст );
//м_КлассФормы.ОКЗР_Добавить("Валюта","Валюта_label",0);
//м_КлассФормы.ОКЗР_Добавить("Сотрудник","Сотрудник_label",0);
//м_КлассФормы.ОКЗР_Добавить("ТипОперации","Сотрудник_label",0);
//м_КлассФормы.ОКЗР_Добавить("Сумма","Сумма_label",0);


Перем ОбязательныеКЗаполнению; //Обязательные к заполнению реквизиты
Перем м_Контекст;
Перем м_РасширениеФормы;
Перем м_СерыйЦвет;


// СТАНДАРТНЫЕ ФУНКЦИИ ДЛЯ КЛАССА
Функция Сам(Конт) Возврат Конт; КонецФункции

Процедура Конструктор()
	ОбязательныеКЗаполнению = СоздатьОбъект("Структура");
	м_СерыйЦвет = глПолучитьСистемныйЦвет( "Window" );
КонецПроцедуры // Конструктор()

Процедура Деструктор()
КонецПроцедуры

//ОТладка!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Процедура ПриОткрытии()
	Форма.Параметр._ПриОткрытии();
КонецПроцедуры


Функция ОКЗР_Добавить( псИдентРекв, псИдентЛейбы = "", псМожноЗаписать = 0) Экспорт
	ЗначВозврата = СоздатьОбъект("Структура");
	ЗначВозврата.Вставить("Идентификатор"		,псИдентРекв,1);
	ЗначВозврата.Вставить("ИдентификаторЛейбы"	,псИдентЛейбы,1);
	ЗначВозврата.Вставить("МожноЗаписать"		,псМожноЗаписать,1); // МожноЗаписать с пустым значением
	Попытка
		ОбязательныеКЗаполнению.Вставить(псИдентРекв,ЗначВозврата,1);
	Исключение
	КонецПопытки;

	Возврат ЗначВозврата;
КонецФункции // ОКЗР_Добавить()


// Проверяем заполнение реквизитов документа, если все оки-возвертаем 1,
// если плохо - 0 и в зависимости от параметра либо ругаемся либо молчим...
Функция ОКЗР_Проверить( псСообщить = 0) Экспорт
	ЗначВозврата = 1; // Все ОК, 0 - все плохо...
	СЦ = 0;
	Для СЦ = 1 По ОбязательныеКЗаполнению.Количество() Цикл
		СтрАтрибута = ОбязательныеКЗаполнению.Получить(СЦ);
		РасшАтрибут = "";
		ЗначениеАтрибута = "";
		Попытка
			РасшАтрибут = м_РасширениеФормы.ПолучитьАтрибут(СтрАтрибута.Идентификатор);
			ЗначениеАтрибута = РасшАтрибут.Значение;
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки;

		РасшАтрибут.ЦветФона = м_СерыйЦвет;
		Если ПустоеЗначение(ЗначениеАтрибута) = 1 Тогда
			Если СтрАтрибута.МожноЗаписать = 0 Тогда
			    ЗначВозврата = 0;
			КонецЕсли;
			РасшАтрибут.ЦветФона = 255;
			Если псСообщить = 1 Тогда
				РасшАтрибут = м_РасширениеФормы.ПолучитьАтрибут(СтрАтрибута.ИдентификаторЛейбы);
				Сообщить("Заполните поле: """ + РасшАтрибут.Заголовок+"""","!");
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Возврат ЗначВозврата;
КонецФункции // ОКЗР_Проверить()




Процедура Инициализация( псКонтекст ) Экспорт
	м_РасширениеФормы = СоздатьОбъект("РасширениеФормы");
	м_РасширениеФормы.УстановитьФорму(псКонтекст.Форма);
	м_Контекст = псКонтекст;
КонецПроцедуры // Инициализация()

//ПриПолучении_<ИмяАтрибута>(ЗначениеАтрибута)
//ПриЗаписи_<ИмяАтрибута>(ЗначениеДляУст)
//Процедура _ПриЧтенииСвойства(strNameOfAttr)
//Функция  _ПриЧтенииСвойства(strNameOfAttr) КонецФункции
//Процедура _ПриЗаписиСвойства(стрИмяАтрибута,  НовоеЗначениеАтриб) КонецПроцедуры
 

  
Наверх
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #5 - 20. Июля 2006 :: 15:41
Печать  
А встроенный класс РаботаСРегистромWin 1С++ не используется по идеологическим соображениям ?
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows
Ответ #6 - 20. Июля 2006 :: 15:47
Печать  
mash писал(а) 20. Июля 2006 :: 15:41:
А встроенный класс РаботаСРегистромWin 1С++ не используется по идеологическим соображениям ?

А я про него забыл (
  
Наверх
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Для FormEx. Получение системных цветов Windows.
Ответ #7 - 25. Марта 2011 :: 11:56
Печать  
Спасибо, пригодилось!  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать