| 
| 
 | Вопрос # 797/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Нужно записать в ini файл название цвета из ColorComboBox и при повторном запуске программы изменить цвет формы на цвет, записанный в ini файл. Как преобразовать тип TColor в строку и наоборот?
 
|  |   Вопрос задал: Евгений Eklmn (статус: Посетитель)Вопрос отправлен: 28 июля 2007, 09:45
 Состояние вопроса: открыт, ответов: 5.
 |  Ответ #1. Отвечает эксперт: Dron Здравствуйте, Трофимов Евгений!TColor свободно конвертируется в Integer, поэтому можно напрямую использовать WriteInteger() и ReadInteger() - работать будет прекрасно.
 
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 28 июля 2007, 09:52
 
 |  Ответ #2. Отвечает эксперт: Градов Ю.М. Здравствуйте, Трофимов Евгений!Можно так IntToHex(ColorDialog1.Color,8)
 
|  | Ответ отправил: Градов Ю.М. (статус: 8-ой класс)Время отправки: 28 июля 2007, 10:05
 
 |  Ответ #3. Отвечает эксперт: mvp Здравствуйте, Трофимов Евгений!По сути Вам уже ответили. В приложении ф-ии StrToColor (не чуствительная к регистру) и ColorToStr.
 Когда-то давно писал эти ф-ии - сейчас сделал бы проще - через массивы и один цыкл. Ну, если захотите - переделаете
 Приложение:Переключить в обычный режим uses Graphics;function StrToColor(name : String) : tcolor;var _: String;begin	_:= LowerCase(name);	if _= 'black' then Result := clBlack else if _= 'maroon' then Result := clMaroon else if _= 'green'
then Result := clGreen else if _= 'olive' then Result := clOlive else if _= 'navy' then Result :=
clNavy else if _= 'purple' then result := clPurple else if _= 'teal' then Result := clTeal else if
_= 'gray' then result := clGray else if _= 'silver' then result := clSilver else if _='red' then
result := clRed else if _= 'lime' then Result := clLime else if _= 'yellow' then Result := clYellow
else if _= 'blue' then result := clBlue else if _= 'fuchsia' then result := clFuchsia else if _=
'aqua' then result := clAqua else if _= 'white' then Result := clWhite else if _= 'moneygreen' then
result := clMoneyGreen else if _= 'skyblue' then Result := clSkyBlue else if _= 'cream' then Result
:= clCream else if _= 'medgray' then result := clMedGray else if _= 'none' then result := clNone
else if _= 'default' then result := clDefault		else if _= 'scrollbar' then Result := clScrollBar else if _= 'background' then Result :=
clBackground else if _= 'activecaption' then Result := clActiveCaption else if _= 'inactivecaption'
then result := clInactiveCaption else if _= 'menu' then result := clMenu else if _= 'window' then
Result := clWindow else if _= 'windowframe' then result := clWindowFrame else if _= 'menutext' then
result := clMenuText else if _= 'windowtext' then result := clWindowText else if _= 'activeborder'
then result := clActiveBorder else if _= 'appworkspace' then Result := clAppWorkSpace else if _=
'highlight' then result := clHighlight else if _= 'btnface' then Result := clBtnFace else if _=
'btnshadow' then result := clBtnShadow else if _= 'graytext' then result := clGrayText else if _=
'btntext' then result := clBtnText else if _='inactivecaptiontext' then result :=
clInactiveCaptionText else if _='btnhighlight' then Result := clBtnHighlight else if _= '3ddkshadow'
then result := cl3DDkShadow else if _= '3dlight' then			result := cl3DLight else if _= 'infotext' then Result := clInfoText else if _= 'infobk' then
result := clInfoBk else if _= 'gradientactivecaption' then Result := clGradientActiveCaption else if
_= 'gradientinactivecaption' then result := clGradientInactiveCaption else result := clNoneend;//------------------------------------------------------------------------------function ColorToStr(color : TColor);begin	case color of		clBlack   	 	  		  : Result := 'Black';		clMaroon  	 	  		  : Result := 'Maroon';		clGreen   	 	  		  : Result := 'Green';		clOlive   	 	  		  : Result := 'Olive';		clNavy    	 	  		  : Result := 'Navy';		clPurple  	 	  		  : Result := 'Purple';		clTeal    	 	  		  : Result := 'Teal';		clGray    	 	  		  : Result := 'Gray';		clSilver  	 	  	   	  : Result := 'Silver';		clRed	     	  		  : Result := 'Red';		clLime    	 	  		  : Result := 'Lime';		clYellow  	 	  	   	  : Result := 'Yellow';		clBlue    	 	  		  : Result := 'Blue';		clFuchsia 	 	  		  : Result := 'Fuchsia';		clAqua	  	 	  		  : Result := 'Aqua';		clWhite   	 	  		  : Result := 'White';		clMoneyGreen 	  		  : Result := 'MoneyGreen';		clSkyBlue    	  		  : Result := 'SkyBlue';		clCream 	 	  		  : Result := 'Cream';		clMedGray    	  		  : Result := 'MedGray';		clNone		 	  		  : Result := 'None';		clDefault 	 	  		  : Result := 'Default';		clScrollBar  	  		  : Result := 'ScrollBar';		clBackground 	  		  : Result := 'BackGround';		clActiveCaption   		  : Result := 'ActiveCaption';		clInactiveCaption 	   	  : Result := 'InActiveCaption';		clMenu			  		  : Result := 'Menu';		clWindow		  		  : Result := 'Window';		clWindowFrame	  		  : Result := 'WindowFrame';		clGradientInactiveCaption : Result := 'GradientInactiveCaption';		clMenuText				  : Result := 'MenuText';		clWindowText			  : Result := 'WindowText';		clActiveBorder			  : Result := 'ActiveBorder';		clAppWorkSpace			  : Result := 'AppWorkSpace';		clHighlight				  : Result := 'HighLight';		clBtnFace				  : Result := 'BtnFace';		clBtnShadow				  : Result := 'BtnShadow';		clGrayText				  : Result := 'GrayText';		clBtnText				  : Result := 'BtnText';		clInactiveCaptionText     : Result := 'InActiveCaptionText';		clBtnHighlight			  : Result := 'BtnHighLight';		cl3DDkShadow			  : Result := '3DDkShadow';		cl3DLight				  : Result := '3DLight';		clInfoText				  : Result := 'InfoText';		clInfoBk				  : Result := 'InfoBk';		clGradientActiveCaption	  : Result := 'GradientActiveCaption'	else REsult := 'None'	endend;
|  | Ответ отправил: mvp (статус: 4-ый класс)Время отправки: 28 июля 2007, 14:48
 
 |  Ответ #4. Отвечает эксперт: Вадим К Здравствуйте, Трофимов Евгений!to Градов Ю.М.:
 А наоборот? отвечу сам c:=StrToInt(\'$\'+s);
 
 To mvp:
 Зачем изобретать велосипед? Ведь есть готовые функции в модуле Graphics. Называются IdentToColor и ColorToIdent.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 28 июля 2007, 15:24
 
 |  Ответ #5. Отвечает эксперт: Дима Гусаков Здравствуйте, Трофимов Евгений!Тип TColor преобразуется в строку функцией olorToString(Color: TColor): string, а обратно StringToColor(const S: string): TColor;
 Приложение:Переключить в обычный режим var  Vars: TIniFile;...  Vars:=TiniFile.Create(extractfilepath(paramstr(0))+'\vars.ini'); Vars.WriteString('Form', 'Color', ColorToString(Form1.Color)); Vars.Free;  procedure TForm1.FormCreate(Sender: TObject);begin Vars:=TiniFile.Create(extractfilepath(paramstr(0))+'\vars.ini'); Form1.Color := StringToColor(Vars.ReadString('Form', 'Color', 'clRed')); Vars.Free;end;
|  | Ответ отправил: Дима Гусаков (статус: 2-ой класс)Время отправки: 28 июля 2007, 16:01
 
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 30 июля 2007, 10:32; участников в обсуждении: 4. 
|   | Dron (статус: Студент), 28 июля 2007, 16:44 [#1]:Вопрос ко всем: зачем конвертировать цвет в строку, если и запись и чтение с TColor элементарно делается как с обычным числом? Заставить машину побольше поработать? С уважением. |  
|   | mvp (статус: 4-ый класс), 28 июля 2007, 17:15 [#2]:2Вадим К. Кажется в Delphi 6 такой ф-ии не было, хотя могу и ошибаться - в любом случае ничего страшного в том, что умеешь обойтись без стандартных.
 2Dron
 Ну, например, есть приложение, которое настраевается вручную через ini-файл (линуксоиды любят) - и что человек должен вспоминать, какое число значит фиалетовый цвет? Мне такое приходилось писать. Другими словами, понадобиться может даже то, что кажется не очевидным. Но всё-таки, в данном вопросе согласен - достаточно сохранить число
 |  
|   | Градов Ю.М. (статус: 8-ой класс), 28 июля 2007, 17:40 [#3]:To Вадим К. По требованию заказчика: "Как преобразовать тип TColor в строку и наоборот?" А про велосипед, это точно.
 |  
|   | Dron (статус: Студент), 28 июля 2007, 17:43 [#4]: Цитата: > По требованию заказчика: "Как преобразовать тип TColor в строку и наоборот?" Да, но возможно человек просто не знал, что с TColor можно обращаться как с числом...
 Так что все варианты правильны, имхо
   С уважением. |  
|   | mvp (статус: 4-ый класс), 28 июля 2007, 18:01 [#5]:Да ладно, - пристали со своим велосипедом  )) Лучше скажите, были ли эти ф-ии в 6-й Делфи (сейчас у меня 7)? |  
|   | Градов Ю.М. (статус: 8-ой класс), 28 июля 2007, 22:47 [#6]:Я из Delphi6 и отвечал |  
|   | mvp (статус: 4-ый класс), 28 июля 2007, 23:49 [#7]:Значит таки действительно велосипед   |  
|   | Вадим К (статус: Академик), 29 июля 2007, 01:50 [#8]: Цитата: вспоминать, какое число значит фиалетовый цвет
 
 Ну для начала фиолетовый
 А во вторых можно и проще. Когда мне пришлось делать подобное, я сделал вначале попытку преобразовать цвет с естественной записи, и если это не получилось, то с шестнадцатеричного. в коде это выглядело где то так
 
 var c:TColor;
s:string;
begin
s = введёная строка
try
if not IdentToColor(\'cl\'+s,c) and not IdentToColor(s,c)then
  c:=StrToInt(\'$\'+s);
except
  c:=0;
  ShowMessage(\'Цвет задан некорректно. Принят чёрный\');
end;В таком виде для задания красного можно юзать следующие конструкции Red, clRed, FF0000 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | mvp (статус: 4-ый класс), 29 июля 2007, 12:25 [#9]:2Вадим К: А мне фиАлетово как пишется фиОлетово, т. к.:
 1) я знаю и без всяких умников, как оно пишется;
 2) русский язык - не мой родной (как впрочем и твой);
 3) мы не на форуме по русскому языку;
 4) посмотри, например на свой ответ в вопросе 792 - сразу несколько ошибок (классика прям: "Что делатЬ?", "Что делает?")
 5) Соринку в чужом глазе видно сразу, а в своём хоть бревно
  
 P. S. Ещё надо было проверить, а вдруг цвет задан в двоичной, 8-, 10-ричной или вообще в любой возможной системе счисления
 |  
|   | Вадим К (статус: Академик), 29 июля 2007, 14:27 [#10]:Стараюсь за своими ошибками следить. И Админ постоянно поправляет. 
 Цитата: я знаю и без всяких умников, как оно пишется
 
 Ок, а почему не пишем?
 По поводу восмеричной системы. о ней знают немногие, а используют и то меньше. В моей программе было указано варианты, как задаётся цвет.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | mvp (статус: 4-ый класс), 29 июля 2007, 15:08 [#11]:Всё Вадим, проехали - давай не будем ссориться. Если обидел - извени. Мой ответ был неудачным, но это не значит, что его нельзя использовать.
 Думаю, вопрос закрыт
 |  
|   | Градов Ю.М. (статус: 8-ой класс), 29 июля 2007, 22:50 [#12]:Это надо же так поцапаться из-за цвета, а если бы спросили перевести пиксели в метры? |  
|   | Вадим К (статус: Академик), 30 июля 2007, 10:32 [#13]:Ну тут вообще ничего сложного. Главное DPI знать... Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |