|
Вопрос # 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 := clNone
- end;
- //------------------------------------------------------------------------------
- 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'
- end
- end;
 |
Ответ отправил: 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 знать...
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|