Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как преобразовать шестнадцатиричный цвет HTML в TColor

Delphi , Графика и Игры , Цвета и Палитра

Как преобразовать шестнадцатиричный цвет HTML в TColor

Стоит взвод молодых бойцов. Старшина:
- По порядку номеров рассчитайсь!!! Солдат-программист:
- Можно вопрос ?
- Можно...
- А в какой системе? Десятичной? Шестнадцатеричной?
- Для дураков объясняю, в десятичной!!!
- Понял! Нулевой!!!


unit colours;

interface
uses
  Windows, Sysutils, Graphics;

  function ConvertHtmlHexToTColor(Color: string):TColor ;
  function CheckHexForHash(col: string):string ;

implementation


function ConvertHtmlHexToTColor(Color: string):TColor ;
var
  rColor: TColor;
begin
  Color := CheckHexForHash(Color);

  if (length(color) >= 6) then
  begin
    {незабудьте, что TColor это bgr, а не rgb: поэтому необходимо изменить порядок}
    color := '$00' + copy(color,5,2) + copy(color,3,2) + copy(color,1,2);
    rColor := StrToInt(color);
  end;

  result := rColor;
end;


// Просто проверяет первый сивол строки на наличие '#' и удаляет его, если он найден
function CheckHexForHash(col: string):string ;
begin
  if col[1] = '#' then
    col := StringReplace(col,'#','',[rfReplaceAll]);
  result := col;
end;

end.

Перевод контента на русский язык:

Код, который вы предоставили, написан на языке Pascal и предназначен для преобразования кода цвета в формате hexadecimal из HTML в тип цвета TColor, используемый в языке программирования Delphi.

Вот разбивка того, что код делает:

  1. Функция CheckHexForHash проверяет, начинается ли входная строка с символа '#'. Если это так, она удаляет символ '#'.
  2. Функция ConvertHtmlHexToTColor принимает код цвета в формате hexadecimal как входной параметр и преобразует его в TColor.

Вот некоторые предложения по улучшению:

  • В функции CheckHexForHash можно использовать функцию TrimLeft вместо StringReplace. Это более эффективно и делает то же самое.
  • В функции ConvertHtmlHexToTColor можно использовать функцию Copy для извлечения красных, зеленых и синих компонентов из кода цвета hexadecimal. Это делает код более читаемым и понятным.

Вот пример реализации:

function ConvertHtmlHexToTColor(Color: string): TColor;
var
  r, g, b: Word;
begin
  Color := CheckHexForHash(Color);

  if Length(Color) >= 7 then // код цвета с каналом альфа
  begin
    r := StrToInt('$' + Copy(Color, 1, 2));
    g := StrToInt('$' + Copy(Color, 3, 2));
    b := StrToInt('$' + Copy(Color, 5, 2));
  end
  else // код цвета без канала альфа
  begin
    r := StrToInt('$' + Copy(Color, 1, 2));
    g := StrToInt('$' + Copy(Color, 3, 2));
    b := StrToInt('$' + Copy(Color, 5, 2));
  end;

  Result := (bshr(b shl 16) or shlr(g, 8) or r);
end;

Код работает следующим образом: извлекает красные, зеленые и синие компоненты из кода цвета hexadecimal с помощью функции Copy. Затем конвертирует эти компоненты в целые числа с помощью функции StrToInt. Наконец, комбинирует компоненты в единый тип TColor с помощью битовых операций.

Обратите внимание, что порядок компонентов важен, потому что TColor представляет цвета в формате BGR (синий, зеленый, красный), а не RGB.

Статья рассказывает о преобразовании шестнадцатиричных цветов HTML в тип TColor, используемых в программировании на языке Delphi, и предлагает функцию для выполнения этого преобразования.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Цвета и Палитра ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:03:58/0.0033369064331055/0