Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из строки "< font color = white >" вытянуть цвет? [D7]


Старт7 ©   (2006-08-22 06:58:00) 

И цвет, чтобы был не в виде текста, а в виде соответствующей цифры?


Ketmar   (2006-08-23 16:34:00) [1]

> [12] Zeqfreed ©   (23.08.06 16:20)
ну, пусть "фича". хотя это, всё же, документированый хак. %-)


Zeqfreed   (2006-08-23 16:20:00) [2]

> [11] Ketmar ©   (23.08.06 16:15)

Просто для меня слова хаки спецификацияникак не могут быть чем-то связанным. По большей части мое высказывание относилось к  [7], конечно.


Ketmar   (2006-08-23 16:15:00) [3]

> [10] Zeqfreed ©   (23.08.06 15:15)
где это я сказал, что не доверяю? я всего лишь имел в виду, что это хак, даже если и описан в стандарте. и этот хак мне не нравится. %-)


Zeqfreed   (2006-08-23 15:15:00) [4]

> [7] tButton ©   (23.08.06 08:20)


> [8] Ketmar ©   (23.08.06 11:16)

http://www.w3.org/TR/CSS21/syndata.html#color-units
Читаем до просветления :) Не доверяете мне, ага? Доверьте же спецификации!! :)

The format of an RGB value in hexadecimal notation is a '#' immediately followed by either three or six hexadecimal characters. The three-digit RGB notation (#rgb) is converted into six-digit form (#rrggbb) by replicating digits, not by adding zeros. For example, #fb0 expands to #ffbb00. This ensures that white (#ffffff) can be specified with the short notation (#fff) and removes any dependencies on the color depth of the display.


Anatoly Podgoretsky   (2006-08-23 15:02:00) [5]

В указанной постановке, кроме парсинга надо завести еще и таблицу соответствий


Ketmar   (2006-08-23 11:16:00) [6]

> [6] Zeqfreed ©   (22.08.06 12:00)
за такие хаки -- пожизненый эцих без гвоздей. %-)


tButton   (2006-08-23 08:20:00) [7]


> Ещё можно записывать цвет как #hhh

эммм... не знал =)
т.е. например, #c80 = #cc8800?
имхо, если такое и используется - то крайне редко и не основываясь на декларациях w3c =)


Zeqfreed   (2006-08-22 12:00:00) [8]

> [2] tButton ©   (22.08.06 07:37)

Ещё можно записывать цвет как #hhh, где h - шестнадцатиричная цифра, причем #abc = #aabbcc.


Наиль   (2006-08-22 10:10:00) [9]


> всё равно вряд ли сильно различишь цвет "0" и "9".

> в виде соответствующей цифры

А я сразу и не заметил.


tButton   (2006-08-22 10:09:00) [10]


> во условиям задачи это всё личшнее.

я добрый и люблю парсить =)

> вряд ли сильно различишь цвет "0" и "9"

эт смотря чьим глазом и на каком девайсе)


Ketmar   (2006-08-22 09:59:00) [11]

> [2] tButton ©   (22.08.06 07:37)
> ну нифига я нагородил
действительно. во условиям задачи это всё личшнее. если нужен "цвет в виде цифры", то можно смело брать clBlack. всегда. всё равно вряд ли сильно различишь цвет "0" и "9".


tButton   (2006-08-22 07:37:00) [12]

для интерпритации hex-цвета
function hex2color(hex: string): tColor;
begin
 if (length(hex)<>6)or(length(hex)<>7) then exit; // умнее не придумал, потому что описание цвета занимает шесть байт. иногда префиксуется решёткой
 if hex[1] = '#' delete(hex, 1, 1);
 // и всё равно могут возникнуть исключения
 r:=hextoint(copy(hex, 1, 2));
 g:=hextoint(copy(hex, 3, 2));
 b:=hextoint(copy(hex, 5, 2));
 result:=rgb(r, g, b);
end;

по-хорошему length(hex)=7 и hex[1]='#'
иначе это нифига не hex
а просто лабуда
такое ни один броузер не поймёт

для интерпретации текстового цвета... ну на вскидку я бы взял tStringList
и зас... заполнил бы его чем-то вроде
white=#ffffff
red=#ff0000

вот в таком акцепте
а потом values[col] // col - строка с текстовым описанием цвета

для rgb... ну наверное опять парсить с умом =)
формат там такой rgb($r, $g, $b)
но в свойствах, емнип, такое не используется, только в стилях

опять же, как узнать в каком формате цвет?
"да прибудет с тобой сила" (с)
если col[1]='#' и length(col)=7 - однозначно hex
если copy(col, 1, 4) = 'rgb(' - однозначно rgb
иначе - текстовое либо охинея

ПыСЫ
ну нифига я нагородил =)


tButton   (2006-08-22 07:26:00) [13]

прикольно.
s:='<font color=white>';
p:=pos('color=', s);
l:=length(s);
col:='';
for i:=p to l do
begin
 c:=s[i];
 if (c='>')or(c=' ')or(c='"')or(c='''') then break;
 col:=col+c;
end;
// чистим кавычки
p:=pos('"', col);
while p<>0 do begin
 delete(s, p ,1);
 p:=pos('"', col);
end;
// чистим апострофы
p:=pos('''', col);
while p<>0 do begin
 delete(s, p ,1);
 p:=pos('''', col);
end;
// по желанию - чистим пробелы
// в результате в переменной col  строка содержащая
// текстовое или hex (а иногда и rgb описание цвета
// интерпретация сего в цвет в формате ОП на совести автора сабжа


код писался "в уме", мож что напутал в функциях


Наверх

Титульная страница Поиск, карта сайта Написать письмо