![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Retriza |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Доброго времени суток.
Суть проблемы такова: У меня есть RichEdit со списком прокси(ip:port). Есть кнопка. Хочу сделать так, чтобы при нажатии на кнопку, строка с дубликатом окрашивалась в красный цвет. Я гуглил, возможно плохо, но всё-таки нашёл ответ. Только там дубликат удаляется. Вот я попытался переделать, чтобы строка не удалялась, а окрашивалась:
...но не получается. Никаких изменений после нажатия на кнопку нет. Скажите, пожалуйста, где ошибка? Или этот код не подходит для окрашивания строки, только для удаления? Не могу понять. Ах да. Пытался потом привязать окрашивание на событие OnChange, но срабатывает не на дубликат. Оно глобально меняет атрибут Color для всех строк. И при дальнейшем изменении содержимого RichEdit, всё окрашивается красным цветом. Нашёл ещё вот такой код, но он предназначен для удаления дубликатов :(
Помогите разобраться, пожалуйста. Я в Delphi новичок. |
||||
|
|||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Retriza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Спасибо! Погуглю и попробую. UPD. Не получается :( Такая же проблема, как и во втором случае с событием OnChange - существующие дубликаты не выделяются цветом. Вместо этого выделяются ВСЕ последующие строки :( Это сообщение отредактировал(а) Retriza - 31.8.2015, 18:46 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Retriza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Да, я знаю. Я погуглил.
Передаю то, что нашёл в сети, погуглив. Просто не до конца понял, как их правильно использовать. Вот такое передаю:
А этот код вообще является работоспособным в обнаружении дубликатов строк? Ошибка только в выделении цветом строки? |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
SelStart:=0 - выделение начинается с 0, т.е с начала текста.
SelLength:=Length(RichEdit1.Text) - длина выделения - весь текст. Не удивительно, что выделяется все. Вам надо в SelStart передавать начало выделяемого текста, а в SelLength длину этого выделяемого текста. Это сообщение отредактировал(а) Poseidon - 31.8.2015, 19:57 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Retriza |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Хм. А как тогда передать в SelStart дубликат строки? Мне нужно, чтобы Вы меня подтолкнули в нужное русло. Готовый код решения мне не нужен, я хочу сам понять принцип работы. UPD. А ещё такой вопрос возник - выделяться будет только дубликат или оригинал тоже? UPD2. Хм. Изменил вот так:
Но почему-то затрагивает не только дубликат. А и другую строку. Тоже выделяет её. Нет. Вообще криво выделяет. Где-то снова ошибся. Это сообщение отредактировал(а) Retriza - 31.8.2015, 20:35 |
||||
|
|||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
1) Выделять будет то, что укажите. Для указания и служат SelStart (откужа начинать выделение) и SelLength (сколько букв выделять).
2) Почитайте про понятие "логические скобки". 3) Если в RichEdit будут буквы, то код StrToInt(RichEdit1.Lines[i]) вызовет исключение. И это совсем не начало выделения. 4) RichEdit1.Lines.Count - это не длина текста, а количество строк в RichEdit. Вы не совсем правильно понимаете работу SelStart и SelLength. Объясню на примере. Допустим у нас есть строка "Hello world". Нам надо выделить в этой строке слово "world". Для этого надо в SelStart передать 6 (позиция начала слова world в строке - 6й символ). В SelLength передать 5 (всего в слове world 5 символов). В вашем случае в SelStart надо передавать позицию начала дуликата, а в SelLength - количество символов дубликата. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Retriza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Понял! Спасибо большое! Почитаю побольше об этом и к практике сразу. |
|||
|
||||
Retriza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.8.2015 Репутация: нет Всего: нет |
Уже не нуждаюсь в этом.
Тему можно закрыть. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |