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

Перевод строки HTML кода в цвет

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



Автор: Fenik
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Зависимости: Graphics
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Автор Федоровских Николай
Дата:        26 октября 2002 г.
***************************************************** }

function HTMLToColor(const s: string; var Color: TColor): Boolean;
{Функция переводит строку HTML кода в цвет.
 Если результат успешен, то возвращает True
 и записывает цвет в переменную Color,
 иначе возвращает False.
 Строка должна быть например такой: #2A09F4
 в диапазоне #000000 - #FFFFFF}

  function No16: Boolean;
    {Функция проверяет относятся ли символы с 2 по 7
     к шестнадцатеричной системе счисления.
     Если относятся, то результат - False,
     иначе - True}
  var
    i: Integer;
  begin
    Result := False;
    for i := 2 to 7 do
      if not ((s[i] in ['0'..'9']) or (s[i] in ['A'..'F'])) then
      begin
        Break;
        Result := True;
      end;
  end;

  function GetNum(pos: Byte): Byte;
    {перевод строки с шетнадцатеричным двухзначным
     числом в десятичное число}
  var
    ms: string;
    E: Integer;
  begin
    {выделяем фрагмент строки длиной в 2 символа
     начиная с заданной позиции и переводим его в число}
    ms := '$' + Copy(s, pos, 2);
    Val(ms, Result, E);
  end;

begin
  Result := False;

  {Функция потерпит неудачу,
   если строка имеет неверный формат.}
  if (Length(s) <> 7) then
    Exit
  else if (s[1] <> '#') then
    Exit
  else if No16 then
    Exit;

  Color := GetNum(6) shl 16 {синий}
  or GetNum(4) shl 8 {зелёный}
  or GetNum(2); {красный}
  {или Color := RGB(GetNum(2), GetNum(4), GetNum(6));}

  Result := True;
end;

Пример использования:

if HTMLToColor(HTMLEdit.Text, C) then
begin
  Panel1.Color := C;
  ChangeColor;
end;

HTMLToColor('#808080', C) {C := clGray}

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

Код - функция Delphi, которая конвертирует строку HTML-цвета в значение TColor, которое можно использовать в приложении графического пользовательского интерфейса (GUI). Функция принимает строку как входной параметр и возвращает булевое значение, указывающее, была ли конвертация успешна.

Распаковка кода:

  1. Функция HTMLToColor определена с двумя параметрами: s (строка, представляющая HTML-цвет) и Color (переменная для хранения конвертированного значения TColor).
  2. Функция проверяет, имеет ли входная строка правильный формат, проверяя, начинается ли она с символа #, имеет ли длину 7 символов и содержит ли только шестнадцатеричные цифры или буквы от A до F.
  3. Если формат неправильный, функция выходит из работы без выполнения дальнейших операций.
  4. Функция определяет два вложенных функции: No16 и GetNum.
    • No16 проверяет, содержит ли входная строка шестнадцатеричные цифры в диапазоне от 2 до 7. Если это так, функция возвращает False; иначе - True.
    • GetNum конвертирует подстроку входной строки (начиная с позиции pos) из шестнадцатеричного в десятичное значение.
  5. Основная часть функции выполняет следующие шаги:
    • Она извлекает красный, зеленый и синий (RGB) значения из входной строки с помощью функции GetNum.
    • Она комбинирует эти RGB-значения в одиночное значение TColor с помощью битовых операций (shl и or).
  6. Функция возвращает True, если конвертация была успешна, и False - иначе.

Код включает пример использования функции HTMLToColor, которая используется для установки цвета панели GUI на основе входной строки.

Альтернативное решение:

Вместо использования вложенных функций можно использовать одиночную функцию с множественными возвращаемыми значениями (используя переменную Result Delphi). Вот обновленная версия кода:

function HTMLToColor(s: string): Boolean;
var
  Color: TColor;
begin
  Result := False;
  if Length(s) <> 7 or s[1] <> '#' then Exit;
  if No16(s) then Exit;

  Color := GetNum(6 shl 16) or GetNum(4 shl 8) or GetNum(2);

  Result := True;
end;
function No16(s: string): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 2 to 7 do
    if not ((s[i] in ['0'..'9']) or (s[i] in ['A'..'F'])) then
    begin
      Break;
      Result := True;
    end;
end;
function GetNum(pos: Byte): Byte;
var
  ms: string;
  E: Integer;
begin
  ms := '$' + Copy(s, pos, 2);
  Val(ms, Result, E);
end;

Этот код более компактен и легче для чтения, чем оригинальная версия. Однако он все еще выполняет те же операции, что и предыдущая версия.

Функция HTMLToColor позволяет конвертировать строку HTML-кода в цвет, при этом проверяя формат строки и переводя шестнадцатеричные символы в десятичное число.


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

Получайте свежие новости и обновления по 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 10:42:39/0.0084900856018066/1