Alex_ST, ага) подразумевается поиск по регулярному выражению, только критериев поиска может быть несколько) Можно ли произвести замену по условию или в VB нельзя?
Alex_ST, ага) подразумевается поиск по регулярному выражению, только критериев поиска может быть несколько) Можно ли произвести замену по условию или в VB нельзя?nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Serge_007, спасибо за мнение) Я даж и не знаю, где спрашивать, чтобы отвечали. Вот здесь вопрос задал, а по существую ответил только ты Поменял цвета на "родные". Смотрим здесь http://www.excelworld.ru/forum/5-72-13312-16-1325524132 Строки сделал потемнее. Лучше хуже, твое мнение?
Quote (Serge_007)
Я уж думаю - может отдельную тему создать?
Даже не знаю... Если людям не интересно, то они ни в какой отвечать не будут.
Serge_007, спасибо за мнение) Я даж и не знаю, где спрашивать, чтобы отвечали. Вот здесь вопрос задал, а по существую ответил только ты Поменял цвета на "родные". Смотрим здесь http://www.excelworld.ru/forum/5-72-13312-16-1325524132 Строки сделал потемнее. Лучше хуже, твое мнение?
Quote (Serge_007)
Я уж думаю - может отдельную тему создать?
Даже не знаю... Если людям не интересно, то они ни в какой отвечать не будут.nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
nerv, я не сразу допер, что это ты, наверное, пытаешься прикрутить для выделения цветом слов в коде VBE… Тогда жди Володю. И проясни, что ты имел в виду в фразе
Quote (nerv)
вариантов подмены может быть несколько
по какому критерию должен выбираться конкретный вариант?
nerv, я не сразу допер, что это ты, наверное, пытаешься прикрутить для выделения цветом слов в коде VBE… Тогда жди Володю. И проясни, что ты имел в виду в фразе
Quote (nerv)
вариантов подмены может быть несколько
по какому критерию должен выбираться конкретный вариант?Alex_ST
изменение на листе гульки IgnoreCase сразу вызывало пересчёт
Это мы сделаем по-другому: в процедуру реакции на изменение галочки добавим только одну новую строчку: Application.Calculate - пересчет всех формул во всех открытых книгах гарантирован! Но только не волотильность!
Лёша, привет!
Quote (Alex_ST)
изменение на листе гульки IgnoreCase сразу вызывало пересчёт
Это мы сделаем по-другому: в процедуру реакции на изменение галочки добавим только одну новую строчку: Application.Calculate - пересчет всех формул во всех открытых книгах гарантирован! Но только не волотильность!v__step
С уважением, Владимир
Сообщение отредактировал v__step - Воскресенье, 01.01.2012, 23:32
Благодарю) Признаться, я поменял почти все стили, а не только выделение слов/текста/комментариев. По совету RAN'а сделал чуть более явную рамку, но в месте с тем оставил небольшое реагирование. Полосу с номерами сделал потемнее, как и сами номера. Пожалуй, я с тобой солидарен, так лучше Попытался посмотреть в Opera, так она не захотела новые стили показывать! Пришлось вручную куки чистить...
Quote (Serge_007)
Мне нравится.
Благодарю) Признаться, я поменял почти все стили, а не только выделение слов/текста/комментариев. По совету RAN'а сделал чуть более явную рамку, но в месте с тем оставил небольшое реагирование. Полосу с номерами сделал потемнее, как и сами номера. Пожалуй, я с тобой солидарен, так лучше Попытался посмотреть в Opera, так она не захотела новые стили показывать! Пришлось вручную куки чистить...nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
наверное, пытаешься прикрутить для выделения цветом слов в коде VBE…
Не, там вопрос вроде как решен. Если интересно, рега получилась вот такая (см. ниже). Знаки доллара $ решил не выделять. global = true ".*?"|\b(?:Abs|Access|Alias|And|AppActivate|Array|As|Asc|AscB|AscW|Atn|Base|Beep|Binary|Boolean|ByRef|Byte|ByVal|Call|CallByName|Case|CBool| CByte|CCur|CDate|CDbl|CDec|ChDir|ChDrive|Choose|Chr|ChrB|ChrW|CInt|CLng|Close|Command|Compare|Const|Cos|CreateObject|CSng|CStr|CurDir|Curren cy|CVar|CVDate|CVErr|Database|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|DDB|Decimal|Declare|Dim|Dir|Do|DoEvents|Double|Each|El se|ElseIf|Empty|End|Environ|EOF|Eqv|Erl|Error|Exit|Exp|Explicit|False|FileAttr|FileCopy|FileDateTime|FileLen|Filter|Fix|For|Format|FormatCur rency|FormatDateTime|FormatNumber|FormatPercent|FreeFile|Function|FV|Get|GetAllSettings|GetAttr|GetObject|GetSetting|Global|GoSub|GoTo|Hex|H our|If|IIf|IMEStatus|Imp|Input|InputB|InputBox|InStr|InStrB|InstrRev|In|Int|Integer|IPmt|IRR|Is|IsArray|IsDate|IsEmpty|IsError|IsMissing|IsN ull|IsNumeric|IsObject|Join|Kill|LBound|LCase|Left|LeftB|Len|LenB|Let|Lib|Like|LoadPicture|LoadResData|LoadResPicture|LoadResString|Loc|Lock |LOF|Log|Long|Loop|LTrim|MacId|MacScript|Mid|MidB|Minute|MIRR|MkDir|Month|MonthName|New|Next|Not|Nothing|Now|NPer|NPV|Null|Object|ObjPtr|Oct |On|Open|Option|Optional|Or|Output|Param|Partition|Pmt|PPmt|Print|Private|Property|Public|Put|QBColor|Rate|Replace|Reset|Resume|Return|RGB|R ight|RightB|RmDir|Rnd|Round|RTrim|Second|Seek|Select|SendKeys|Set|SetAttr|Sgn|Shell|Sin|Single|SLN|Space|Spc|Split|Sqr|Static|Stop|Str|StrCo mp|StrConv|String|StrPtr|StrReverse|Sub|Switch|SYD|Tab|Tan|Then|Time|Timer|TimeSerial|TimeValue|To|Trim|True|Type|TypeName|TypeOf|UBound|UCa se|Unlock|Until|Val|Variant|VarPtr|VarType|Weekday|WeekdayName|Wend|While|With|WithEvents|Xor|Year)\b\$?|'.*$
Quote (Alex_ST)
по какому критерию должен выбираться конкретный вариант?
Допустим рега такая: [1-5]|[6-9] А при замене я просто бы указывал условия: If найдено < 6 Then меняем_на_одно Else меняем_на_другое Такое возможно в VB?
Quote (Alex_ST)
я не сразу допер, что это ты
Да там вроде ник мой и ава на пол экрана
Quote (Alex_ST)
наверное, пытаешься прикрутить для выделения цветом слов в коде VBE…
Не, там вопрос вроде как решен. Если интересно, рега получилась вот такая (см. ниже). Знаки доллара $ решил не выделять. global = true ".*?"|\b(?:Abs|Access|Alias|And|AppActivate|Array|As|Asc|AscB|AscW|Atn|Base|Beep|Binary|Boolean|ByRef|Byte|ByVal|Call|CallByName|Case|CBool| CByte|CCur|CDate|CDbl|CDec|ChDir|ChDrive|Choose|Chr|ChrB|ChrW|CInt|CLng|Close|Command|Compare|Const|Cos|CreateObject|CSng|CStr|CurDir|Curren cy|CVar|CVDate|CVErr|Database|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|DDB|Decimal|Declare|Dim|Dir|Do|DoEvents|Double|Each|El se|ElseIf|Empty|End|Environ|EOF|Eqv|Erl|Error|Exit|Exp|Explicit|False|FileAttr|FileCopy|FileDateTime|FileLen|Filter|Fix|For|Format|FormatCur rency|FormatDateTime|FormatNumber|FormatPercent|FreeFile|Function|FV|Get|GetAllSettings|GetAttr|GetObject|GetSetting|Global|GoSub|GoTo|Hex|H our|If|IIf|IMEStatus|Imp|Input|InputB|InputBox|InStr|InStrB|InstrRev|In|Int|Integer|IPmt|IRR|Is|IsArray|IsDate|IsEmpty|IsError|IsMissing|IsN ull|IsNumeric|IsObject|Join|Kill|LBound|LCase|Left|LeftB|Len|LenB|Let|Lib|Like|LoadPicture|LoadResData|LoadResPicture|LoadResString|Loc|Lock |LOF|Log|Long|Loop|LTrim|MacId|MacScript|Mid|MidB|Minute|MIRR|MkDir|Month|MonthName|New|Next|Not|Nothing|Now|NPer|NPV|Null|Object|ObjPtr|Oct |On|Open|Option|Optional|Or|Output|Param|Partition|Pmt|PPmt|Print|Private|Property|Public|Put|QBColor|Rate|Replace|Reset|Resume|Return|RGB|R ight|RightB|RmDir|Rnd|Round|RTrim|Second|Seek|Select|SendKeys|Set|SetAttr|Sgn|Shell|Sin|Single|SLN|Space|Spc|Split|Sqr|Static|Stop|Str|StrCo mp|StrConv|String|StrPtr|StrReverse|Sub|Switch|SYD|Tab|Tan|Then|Time|Timer|TimeSerial|TimeValue|To|Trim|True|Type|TypeName|TypeOf|UBound|UCa se|Unlock|Until|Val|Variant|VarPtr|VarType|Weekday|WeekdayName|Wend|While|With|WithEvents|Xor|Year)\b\$?|'.*$
Quote (Alex_ST)
по какому критерию должен выбираться конкретный вариант?
Допустим рега такая: [1-5]|[6-9] А при замене я просто бы указывал условия: If найдено < 6 Then меняем_на_одно Else меняем_на_другое Такое возможно в VB?nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Добрый день! Приношу извинения всем (особенно, Вам, уважаемый Nerv) за невразумительные ответы на дружественной ветке в новогоднюю ночь - дело не в водке, а в манере - вовремя уйти в сторону, если человек начинает сам до всего догадываться Ладно, по делу Если я правильно понял, вопрос - о цепочке замен в тексте, который может быть разбит на множество 3-х видов подстрок (плюс пробелы и т.п.): vbaKey; vbaText; vbaComment (первые две подстроки "перемешаны") Имеется шаблон поиска, по которому можно найти все вхождения Речь идет об одномшаблоне замены, по которому должны быть заменены все найденные вхождения во всем тексте. Вот так: 1) vbaKey >> <span class=\"vbaKey\">vbaKey</span> 2) vbaText >> <span class=\"vbaText\">vbaText</span> 3) vbaComment >> <span class=\"vbaComment\">vbaComment</span>
Добрый день! Приношу извинения всем (особенно, Вам, уважаемый Nerv) за невразумительные ответы на дружественной ветке в новогоднюю ночь - дело не в водке, а в манере - вовремя уйти в сторону, если человек начинает сам до всего догадываться Ладно, по делу Если я правильно понял, вопрос - о цепочке замен в тексте, который может быть разбит на множество 3-х видов подстрок (плюс пробелы и т.п.): vbaKey; vbaText; vbaComment (первые две подстроки "перемешаны") Имеется шаблон поиска, по которому можно найти все вхождения Речь идет об одномшаблоне замены, по которому должны быть заменены все найденные вхождения во всем тексте. Вот так: 1) vbaKey >> <span class=\"vbaKey\">vbaKey</span> 2) vbaText >> <span class=\"vbaText\">vbaText</span> 3) vbaComment >> <span class=\"vbaComment\">vbaComment</span>v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 02.01.2012, 12:10
Для так поставленной задачи ответ простой: к сожалению, нет (причина - перемешанность текста) Но если не обрабатывать vbaText, то задача решается в два действия:
Для vbaKey Шаблон поиска: (?:Abs|Access...|Year) Шаблон замены: <span class=\"vbaKey\">$1</span>
Для vbaComment Шаблон поиска: ('.*$) Шаблон замены: <span class=\"vbaComment\">$1</span>
Первая замена выполняется для исходного текста, а вторая - для того, что от него осталось после первой замены
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобрался
Для так поставленной задачи ответ простой: к сожалению, нет (причина - перемешанность текста) Но если не обрабатывать vbaText, то задача решается в два действия:
Для vbaKey Шаблон поиска: (?:Abs|Access...|Year) Шаблон замены: <span class=\"vbaKey\">$1</span>
Для vbaComment Шаблон поиска: ('.*$) Шаблон замены: <span class=\"vbaComment\">$1</span>
Первая замена выполняется для исходного текста, а вторая - для того, что от него осталось после первой замены
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобралсяv__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 02.01.2012, 12:38
Для так поставленной задачи ответ простой: к сожалению, нет (причина - перемешанность текста)
В VBA - нет, в JavaScript - да Поэтому я и спрашивал у Алексея
Quote (nerv)
Могу я поинтересоваться, как в VB с помощью RegExp быстрее всего сделать замену, при условии, что вариантов подмены может быть несколько?
думал, мож чего не догоняю, оказывается ни как) И Вы эт подтверждаете.
Quote (v__step)
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобрался
(?:x) Находит x, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн.* Иными словами - это группировка без запоминания.
Quote (v__step)
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобрался
Кажется, поначалу немного не понял Ваш вопрос) Для того, чтобы ко всей группе можно было применить \b(?:group)\b\$?, т.е. т.н. "поиск по словам" (определить границу слов) с необязательным долларом на конце.
* по крайней мере в js
Quote (v__step)
Для так поставленной задачи ответ простой: к сожалению, нет (причина - перемешанность текста)
В VBA - нет, в JavaScript - да Поэтому я и спрашивал у Алексея
Quote (nerv)
Могу я поинтересоваться, как в VB с помощью RegExp быстрее всего сделать замену, при условии, что вариантов подмены может быть несколько?
думал, мож чего не догоняю, оказывается ни как) И Вы эт подтверждаете.
Quote (v__step)
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобрался
(?:x) Находит x, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн.* Иными словами - это группировка без запоминания.
Quote (v__step)
Замечание: для чего применено "(?:" в шаблоне поиска vbaKey, я не разобрался
Кажется, поначалу немного не понял Ваш вопрос) Для того, чтобы ко всей группе можно было применить \b(?:group)\b\$?, т.е. т.н. "поиск по словам" (определить границу слов) с необязательным долларом на конце.
Во всех диалектах RegExp при замене можно воспользоваться только одним шаблоном поиска и одним шаблоном замены. Другое дело, что шаблон поиска может содержать подвыражения (они заключаются в круглые скобки), а шаблон замены может содержать ссылки на подвыражения ($3 - это ссылка на третье подвыражение) Но при этом возможна работа только с той последовательностью подвыражений, которая зафиксирована в шаблоне поиска. Именно эта тонкость мешает в нашем случае Если надо выполнить несколько замен с разными шаблонами замены в каждом случае, придется записать такое же количество шаблонов поиска - ничего не поделаешь... Но это совершенно нормально. Хоть сто раз
В нашем случае все было бы просто, если бы не vbaText. Может быть, все-таки, основной текст можно подсветить по умолчанию?
Quote (nerv)
о трех шаблонах
Во всех диалектах RegExp при замене можно воспользоваться только одним шаблоном поиска и одним шаблоном замены. Другое дело, что шаблон поиска может содержать подвыражения (они заключаются в круглые скобки), а шаблон замены может содержать ссылки на подвыражения ($3 - это ссылка на третье подвыражение) Но при этом возможна работа только с той последовательностью подвыражений, которая зафиксирована в шаблоне поиска. Именно эта тонкость мешает в нашем случае Если надо выполнить несколько замен с разными шаблонами замены в каждом случае, придется записать такое же количество шаблонов поиска - ничего не поделаешь... Но это совершенно нормально. Хоть сто раз
В нашем случае все было бы просто, если бы не vbaText. Может быть, все-таки, основной текст можно подсветить по умолчанию?v__step
Я просто привык к (?=, но это совсем другое Бог с ним, для vbaKey при отдельном поиске просмотр вперед не нужен, а вот границы слов и \$? я не записал - поспешил, исправляем: Шаблон поиска: \b(?:Abs|Access...|Year)\b\$? Шаблон замены: <span class=\"vbaKey\">$1</span>
Quote (nerv)
(?:x)
Я просто привык к (?=, но это совсем другое Бог с ним, для vbaKey при отдельном поиске просмотр вперед не нужен, а вот границы слов и \$? я не записал - поспешил, исправляем: Шаблон поиска: \b(?:Abs|Access...|Year)\b\$? Шаблон замены: <span class=\"vbaKey\">$1</span>v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 02.01.2012, 13:28
Во всех диалектах RegExp при замене можно воспользоваться только одним шаблоном поиска и одним шаблоном замены.
По сути Вы правы, но на деле я использую ТРИ шаблона замены)
Шаблон поиска один, но включает три подшаблона. Я, конечно, могу привести код js, только поймете ли Вы его? Попробую прокомментировать. Три шаблона замены достигаются путем передачи в функцию замены функции выбора шаблона
Сразу оговорюсь, js нетипизированный и очень свободный язык)
Один поиск и замена по строке, слева на право. При нахождении совпадения оно возвращается во вложенную функцию, в частотности в ее единственный аргумент f строкой. Далее определяем, что именно нашли по первому символу этой строки: двойная кавычка - строка, одинарная - комментарий, все остальное - ключевые слова. Соответственно. к найденному применяем оформление и возвращаем в функцию замены Replace оформленную строку подмены. Т.о. я достигаю трех шаблонов поиска и замены. Не знаю, может быть можно и проще, но я додумался только так)
/тут шаблон реги/ g глобальный поиск синим сама рега
строка = строка.replace(/".*?"|\b(?:Abs|...|Year)\b\$?|'.*$/g, _function(f) { // Получаем найденную строку. ___switch(f.charAt(0)) { // Проверяем, что нашли, ориентируясь по первому символу строки и возвращаем одно из трех: ___case "\"": return "<span class=\"vbaText\">" + f + "</span>"; // оформленные текстовые строки, ___case "'": return "<span class=\"vbaComment\">" + f + "</span>"; // оформленные комментарии, ___default: return "<span class=\"vbaKey\">" + f + "</span>"; // оформленные ключевые слова. __} _} );
Quote (v__step)
Во всех диалектах RegExp при замене можно воспользоваться только одним шаблоном поиска и одним шаблоном замены.
По сути Вы правы, но на деле я использую ТРИ шаблона замены)
Шаблон поиска один, но включает три подшаблона. Я, конечно, могу привести код js, только поймете ли Вы его? Попробую прокомментировать. Три шаблона замены достигаются путем передачи в функцию замены функции выбора шаблона
Сразу оговорюсь, js нетипизированный и очень свободный язык)
Один поиск и замена по строке, слева на право. При нахождении совпадения оно возвращается во вложенную функцию, в частотности в ее единственный аргумент f строкой. Далее определяем, что именно нашли по первому символу этой строки: двойная кавычка - строка, одинарная - комментарий, все остальное - ключевые слова. Соответственно. к найденному применяем оформление и возвращаем в функцию замены Replace оформленную строку подмены. Т.о. я достигаю трех шаблонов поиска и замены. Не знаю, может быть можно и проще, но я додумался только так)
/тут шаблон реги/ g глобальный поиск синим сама рега
строка = строка.replace(/".*?"|\b(?:Abs|...|Year)\b\$?|'.*$/g, _function(f) { // Получаем найденную строку. ___switch(f.charAt(0)) { // Проверяем, что нашли, ориентируясь по первому символу строки и возвращаем одно из трех: ___case "\"": return "<span class=\"vbaText\">" + f + "</span>"; // оформленные текстовые строки, ___case "'": return "<span class=\"vbaComment\">" + f + "</span>"; // оформленные комментарии, ___default: return "<span class=\"vbaKey\">" + f + "</span>"; // оформленные ключевые слова. __} _} );nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Вопрос ко всем: в excel есть такая штука как [строка] (evaluate). По идее в квадратных скобках строка, так вот выделять ее цветом как строку или не стоит?
Вопрос ко всем: в excel есть такая штука как [строка] (evaluate). По идее в квадратных скобках строка, так вот выделять ее цветом как строку или не стоит?nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Это мое "увлечение юности". Со временем проходит. Наиболее часто употребляемые слова в Excel.VBA - Range(), Cells(), Worksheets(), Workbooks(), [...] (в основном, вместо Range(), что очень нехорошо, но что поделаешь... для кого-то так привычнее)
Возможно, было бы неплохо выделять переменные, но это нетривиальная задача - стоит ли?
Не стоит превращать листинг в папугая. Не стоит делать его слишком ярким, разве что цвет примечаний можно немного высветлить, а то они почти сливаются с основным текстом Подсветка активной строки скорее мешает, чем помогает
Прошу сделать скидку на полнейшую субъективность!
Quote (nerv)
в excel есть такая штука как [строка] (evaluate)
Это мое "увлечение юности". Со временем проходит. Наиболее часто употребляемые слова в Excel.VBA - Range(), Cells(), Worksheets(), Workbooks(), [...] (в основном, вместо Range(), что очень нехорошо, но что поделаешь... для кого-то так привычнее)
Возможно, было бы неплохо выделять переменные, но это нетривиальная задача - стоит ли?
Не стоит превращать листинг в папугая. Не стоит делать его слишком ярким, разве что цвет примечаний можно немного высветлить, а то они почти сливаются с основным текстом Подсветка активной строки скорее мешает, чем помогает
Прошу сделать скидку на полнейшую субъективность!v__step
С уважением, Владимир
Сообщение отредактировал v__step - Четверг, 05.01.2012, 10:56
v__step, спасибо за помощь [текст] пока в раздумьях выделять или нет. А если уж и выделять, то также, как и текстовые строки. Как Вам такой вариант?
Quote (v__step)
Возможно, было бы неплохо выделять переменные, но это нетривиальная задача - стоит ли?
Думаю, нет)
Quote (v__step)
Не стоит превращать листинг в папугая.
В целом, Вы правы, везде нужна мера. Но, если вы когда нибудь работали в notepad++, то, согласитесь, там весьма удобно (на мой взгляд) реализовано выделение цветом.
Quote (v__step)
Подсветка активной строки скорее мешает, чем помогает
RAN такого же мнения. А я думаю, что можно отвести мышку в сторону (для тех кому это не нравиться) или сделать включение/отключение подсветки строки, или сделать ее реагирование по клику на строку (а не перемещению указателя) Или сделать более мягкий цвет (ближе к белому, т.е. фону форума). Думаю, последний вариант оптимальный. Еще кто как считает?
v__step, спасибо за помощь [текст] пока в раздумьях выделять или нет. А если уж и выделять, то также, как и текстовые строки. Как Вам такой вариант?
Quote (v__step)
Возможно, было бы неплохо выделять переменные, но это нетривиальная задача - стоит ли?
Думаю, нет)
Quote (v__step)
Не стоит превращать листинг в папугая.
В целом, Вы правы, везде нужна мера. Но, если вы когда нибудь работали в notepad++, то, согласитесь, там весьма удобно (на мой взгляд) реализовано выделение цветом.
Quote (v__step)
Подсветка активной строки скорее мешает, чем помогает
RAN такого же мнения. А я думаю, что можно отвести мышку в сторону (для тех кому это не нравиться) или сделать включение/отключение подсветки строки, или сделать ее реагирование по клику на строку (а не перемещению указателя) Или сделать более мягкий цвет (ближе к белому, т.е. фону форума). Думаю, последний вариант оптимальный. Еще кто как считает?