
Автор: 
Можно использовать функцию из модуля Windows:
Можно написать функцию вручную (не используя модуль Windows):
Обсудить на форуме

Copyright © 2008 — 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.
I need any solutions on how to convert HTML HEX color value to RGB and then output RGB values as string to label/edit. So, for example if input is #FFFFFF the output would be 255,255,255. How can I do that?
closed as too broad by Sertac Akyuz, Jerry Dodge, Bhargav Rao ♦ Mar 4 ’17 at 14:36
Please edit the question to limit it to a specific problem with enough detail to >If this question can be reworded to fit the rules in the help center, please edit the question.
1 Answer 1
Question (Question somewhat shortened)
I need HEX color value to label/edit -color. e.g. #FFFFFF the output would be 255,255,255.
If I understand the question correctly you want to assign a TEdit.Color a html hex value like #662233
Delphi Edit1.Color or label1.Color can not handle 255,255,255 directly.
So you need a $ Hex string like $00662233.
Here a short function how to.
The Input value of Edit1 must be validated: Instead of TLabel I use a TPanel.
Special settings are needed if you use a VCL Theme

Update
If you want simple convert the hex to rgb use this.
You will get for Delphi order
#35358B
139,53,53
Look at the Image from the Color Picker you will see in the RGB fields the same value.
or the HTML order is (Below the 35358B field)
#8B3535
So do not confuse this !
If you want to use html Color Codes in Delphi for a component color you have to use the Html Color Code in reverse.
Начнём с того, что цвета в компьютере представимы в различных цветовых моделях, таких как RGB, CMYK, LAB, HSV, HSL и другие. Здесь я буду рассматривать только RGB . Сейчас расскажу почему.
Если не очень понятно, то можно переписать так:
Заметили как просто? Однако, будут небольшие проблемы. Но позже.
Естественно, есть и обратные функции, извлекающие нужные компоненты цвета — GetRValue , GetGValue и GetBValue :
Их тоже можно написать проще, используя целочисленное деление (div) и остаток от деления (mod), предлагаю подумать как.
Цвета по названию
Наиболее используемые цвета объявлены в Delphi (кстати, уже в модуле «Graphics») именными константами — названиями цветов с префиксом «cl». Их не так много, как предусматривает HTML , но всё же что-то. Их можно разделить на три группы.
Стандартные
16 цветов, знакомых каждому. О колонке #RRGGBB в таблице расскажу чуть позже.
| ### | Название | Цвет | Значение | R, G, B | #RrGgBb |
| clBlack | Чёрный | 0 | 0, 0, 0 | #000000 | |
| clMaroon | Тёмно-красный | 128 | 128, 0, 0 | #800000 | |
| clGreen | Зелёный | 32`768 | 0, 128, 0 | #008000 | |
| clOlive | Оливковый | 32`896 | 128, 128, 0 | #808000 | |
| clNavy | Тёмно-синий | 8`388`608 | 0, 0, 128 | #000080 | |
| clPurple | Пурпурный | 8`388`736 | 128, 0, 128 | #800080 | |
| clTeal | Стальной | 8`421`376 | 0, 128, 128 | #008080 | |
| clGray | Серый | 8`421`504 | 128, 128, 128 | #808080 | |
| clSilver | Серебряный | 12`632`256 | 192, 192, 192 | #C0C0C0 | |
| clRed | Красный | 255 | 255, 0, 0 | #FF0000 | |
| clLime | Ярко-зелёный | 65`280 | 0, 255, 0 | #00FF00 | |
| clYellow | Жёлтый | 65`535 | 255, 255, 0 | #FFFF00 | |
| clBlue | Синий | 16`711`680 | 0, 0, 255 | #0000FF | |
| clFuchsia | Фиолетовый | 16`711`935 | 255, 0, 255 | #FF00FF | |
| clAqua | Бирюзовый | 16`776`960 | 0, 255, 255 | #00FFFF | |
| clWhite | Белый | 16`777`215 | 255, 255, 255 | #FFFFFF |
Расширенные
Зачем-то разработчики выделили в отдельную категорию ещё 4 более редких цвета.
| ### | Название | Цвет | Значение | R, G, B | #RrGgBb |
| clMoneyGreen | Money Green | 12`639`424 | 192, 220, 192 | #C0DCC0 | |
| clSkyBlue | Sky Blue | 15`780`518 | 166, 202, 240 | #A6CAF0 | |
| clCream | Cream | 15`793`151 | 255, 251, 240 | #FFFBF0 | |
| clMedGray | Medium Gray | 10`789`024 | 160, 160, 164 | #A0A0A4 |
Системные
Они имеют названия, но само значение цвета зависит от текущей версии ОС и выбранной темы. Как это реализовано? Расскажу после таблицы, в которой представлены системные цвета для стандартных тем Windows XP и Windows 7.
| Название | Значение | Win Xp | Win 7 | ||||
| ### | R, G, B | #RrGgBb | ### | R, G, B | #RrGgBb | ||
| clActiveBorder | -16`777`206 | 212, 208, 200 | #D4D0C8 | 180, 180, 180 | #B4B4B4 | ||
| clActiveCaption | -16`777`214 | 0, 84, 227 | #0054E3 | 153, 180, 209 | #99B4D1 | ||
| clAppWorkSpace | -16`777`204 | 128, 128, 128 | #808080 | 171, 171, 171 | #ABABAB | ||
| clBackground | -16`777`215 | 0, 78, 152 | #004E98 | 0, 0, 0 | #000000 | ||
| clBtnFace | -16`777`201 | 236, 233, 216 | #ECE9D8 | 240, 240, 240 | #F0F0F0 | ||
| clBtnHighlight | -16`777`196 | 255, 255, 255 | #FFFFFF | 255, 255, 255 | #FFFFFF | ||
| clBtnShadow | -16`777`200 | 172, 168, 153 | #ACA899 | 160, 160, 160 | #A0A0A0 | ||
| clBtnText | -16`777`198 | 0, 0, 0 | #000000 | 0, 0, 0 | #000000 | ||
| clCaptionText | -16`777`207 | 255, 255, 255 | #FFFFFF | 0, 0, 0 | #000000 | ||
| clGradientActiveCaption | -16`777`189 | 61, 149, 255 | #3D95FF | 185, 209, 234 | #B9D1EA | ||
| clGradientInactiveCaption | -16`777`188 | 157, 185, 235 | #9DB9EB | 215, 228, 242 | #D7E4F2 | ||
| clGrayText | -16`777`199 | 172, 168, 153 | #ACA899 | 109, 109, 109 | #6D6D6D | ||
| clHighlight | -16`777`203 | 49, 106, 197 | #316AC5 | 51, 153, 255 | #3399FF | ||
| clHighlightText | -16`777`202 | 255, 255, 255 | #FFFFFF | 255, 255, 255 | #FFFFFF | ||
| clHotLight | -16`777`190 | 0, 0, 128 | #000080 | 0, 102, 204 | #0066CC | ||
| clInactiveBorder | -16`777`205 | 212, 208, 200 | #D4D0C8 | 244, 247, 252 | #F4F7FC | ||
| clInactiveCaption | -16`777`213 | 122, 150, 223 | #7A96DF | 191, 205, 219 | #BFCDDB | ||
| clInactiveCaptionText | -16`777`197 | 216, 228, 248 | #D8E4F8 | 67, 78, 84 | #434E54 | ||
| clInfoBk | -16`777`192 | 255, 255, 225 | #FFFFE1 | 255, 255, 225 | #FFFFE1 | ||
| clInfoText | -16`777`193 | 0, 0, 0 | #000000 | 0, 0, 0 | #000000 | ||
| clMenu | -16`777`212 | 255, 255, 255 | #FFFFFF | 240, 240, 240 | #F0F0F0 | ||
| clMenuBar | -16`777`186 | 236, 233, 216 | #ECE9D8 | 240, 240, 240 | #F0F0F0 | ||
| clMenuHighlight | -16`777`187 | 49, 106, 197 | #316AC5 | 51, 153, 255 | #3399FF | ||
| clMenuText | -16`777`209 | 0, 0, 0 | #000000 | 0, 0, 0 | #000000 | ||
| clScrollBar | -16`777`216 | 212, 208, 200 | #D4D0C8 | 200, 200, 200 | #C8C8C8 | ||
| cl3DDkShadow | -16`777`195 | 113, 111, 100 | #716F64 | 105, 105, 105 | #696969 | ||
| cl3DLight | -16`777`194 | 241, 239, 226 | #F1EFE2 | 227, 227, 227 | #E3E3E3 | ||
| clWindow | -16`777`211 | 255, 255, 255 | #FFFFFF | 255, 255, 255 | #FFFFFF | ||
| clWindowFrame | -16`777`210 | 0, 0, 0 | #000000 | 100, 100, 100 | #646464 | ||
| clWindowText | -16`777`208 | 0, 0, 0 | #000000 | 0, 0, 0 | #000000 | ||
Ага, заметили, что цвета отрицательные? Их невозможно получить из трёх компонент функцией RGB(. ), невозможно извлечь их компоненты, передав такой цвет в GetRValue(. ) и ему подобные. Это и позволяет дать возможность системе выбирать значения этих цветов исходя из настроек. Чтобы преобразовать их в обычные, положительные, цвета имеется специальная функция ColorToRGB из модуля «Graphics»:
Теперь с ним можно работать, как и прежде.
Название как строка
Кстати, Delphi имеет представление о том, как названы его цветовые константы, и позволяет преобразовать строку с названием цвета в сам цвет, используя функцию StringToColor :
И наоборот, по цвету попробовать узнать его название, используя ColorToString :
Особо любознательные могли задаться вопросом: А что будет, если цвет не имеет названия? Ответ: функция вернёт преобразованное в строку число (не забываем, TColor — всего лишь целочисленный тип).
Два представления: #RrGgBb и #BbGgRr
Часто цвета записывают короче, используя Шестнадцатеричную систему счисления. Это позволяет уложиться в 7 символов вида #RRGGBB:
# — как отличительный знак такой записи;
RR — две шестнадцатеричных цифры, отвечающих за красный;
GG — за зелёный;
BB — и за синий.
Такая запись достаточно распространена, и используется, например, в HTML.
Запомнили их порядок? А теперь я скажу, что бывает очень похожая запись, вида #BBGGRR, где красный и синий поменялись местами. Именно такой порядок цветов получается при использовании ColorToString из предыдущего абзаца. Плюс и форматирование там немного другое. В общем, я не советую без надобности пользоваться встроенной функцией, лучше написать свою:
Она уже будет приводить любой (положительный!) цвет к виду #RRGGBB, даже если он имеет название.