![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| CHERRY |
|
||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Год назад я задавал подобный ворос по Delphi 2009.
Ответа не нашлось. Рискну повторить для Delphi 2010, хотя принципиальной разницы нет. В RichEdit вставлен текст:
Функция
возвращает слово справа от курсора до ближайшего пробела или конца строки. В Turbo Delphi(2006) все работает правильно. В Delphi 2009-2010 все ломается. В 2006 Selstart перед словом "кровавым" возвращает 17, а в 2010 возвращает 16. Если заменить абзацы #$A#$D на пробел, все работает. Не доганяю. Научите бестолкового. --------------------
Трясу надежды ветвь, но где желанный плод? |
||||
|
|||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 6 Всего: 112 |
В новых версиях RichEdit символ разрыва строки считается за один-единственный символ (типа "\r"), а не за два CR/LF, как в Rich Edit 1.0.
Вероятно, причина в этом. |
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Да я уже сообразил, пока писал вопрос.
Если подсчитывать количество абзацев и корректировать сдвиг по тексту, то вроде работает. Но это не выход. А если текст мегабайтный. Да и что искать? Отладчик показавает текст: В белом плаще#$D#$Aс кровавым подбоем,#$D#$Aшаркающей кавалерийской походкой#$D#$A Что такое в новой дельфе #$D#$A. Раньше я мог искать любой из символов #$D или #$A или #$B и было счастье. Что делать сейчас. Чувствую решение простейшее, но мозгов не хватает. --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 6 Всего: 112 |
Возможно, я не совсем понял назначение вашей функции, но а что если заменить это:
на это:
Блин, не то написал. Нет D2010, чтобы потестировать... Это сообщение отредактировал(а) Amphiluke - 14.2.2010, 21:12 |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
ТОже что и #10 И #13, ничего более Странно я писал код где нужно было найти символы конца строки и всё было тип топ, в 2010 версии. Я искал символ #10 а потом смотрел есть ли следующий #13 и если есть то я их удалял(ну мне так надо было и всё работало) А в чём проблема чтобы взять весь текст из RichEdit скорировать в объект класса Tstrings и там взять сделать поиск нужного, хотя такой метод будет несколько дольше работать и жрать памяти будет тоже больше. Вообще проблем не должно возникать, может ты хочешь слишком умный код написать??? Я обычно простые вещи пишу просто, если мне нужно слово, на котором стоит курсор, то я бы просто разбил бы строку на две и выделил бы в первой подстроке последний пробел, а во второй первый пробел, ну исоответственно потом процедуры copy и сложения двух строк(это тупой вариант, но работать должен) -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Я проверил, работает, но... Что такое $21 Я проверял на начало строки (Mark ='') --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 6 Всего: 112 |
Я имел в виду, что начиная с символа с кодом $21 начинаются обычные отображаемые символы читаемого текста, а всё, что ниже — либо пробел, либо служебный символ.
|
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Я не хачу мудрить. У меня на 2006 рабочая прога.Фирма не ней работает. Это специфический текстовый редактор с подсветкой определенного синтаксиса. Все основано на RichEdit. Все писано мной. Работает идеально не один год вылизую. Решил ради интереса проверить на 2010. Банан двууглекислый. Вся подсветка пошла со смещением. Чем больше абзацев, тем больше сдвиг. Убираю абзацы, все красиво? Вот такая блин фигня. Добавлено через 5 минут и 44 секунды
Все работает, кроме слов в начале строки. Может в юникодных версиях абзацы нужно искать не как #$D#$A. Может это так отладчик по старинке их рисует? --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Извиняюсь
Это не работает. Работает, если подсчитывать количество абзацев до курсора и учитывать при смещении. Я просто забыл в суете удалть старый код. Итак мы вернулись в начало. --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| Amphiluke |
|
||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 6 Всего: 112 |
В общем, если проблема в том только, чтобы возвращалось одинаковое значение как в D2010, так и в ранних, можно было бы еще попробовать вот такое:
Впрочем, проверить не могу. А смысл все тот же — для юникодного окна пересчитать значение SelStart, добавив нужное значение, чтобы было как с CR/LF. Просто один из способов... Добавлено через 3 минуты и 25 секунд Можно, наверное, даже кратче:
|
||||
|
|||||
| DarkProg |
|
||||||||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Это что за, извините, бред, начало строки это символ с индексом 1, а это применимо только к проверке строки на пустоту, не более. А если курсор в самом начале строки то по твоему коду получится всё равно 1 символ строки исходя из
А у тебя код не иделальный, потому что ты юзаешь одну лишнюю переменную, которая называется Flag, и ещё я читал что функция
работает немного дольше чем тупое
Щас попробую быстренько код сваять, если получится выложу. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
||||||||
|
|||||||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Я думаю понятно без коментариев ТОлько что проверил в D2010 Это сообщение отредактировал(а) DarkProg - 14.2.2010, 22:57 -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Да, для отделновзятой строки все работает. Но задача не в том, чтобы найти слово справа от курсора в строке. В общем случае идет поиск в строке RichEdit.Text и единственные отправные точки это #$D#$A Проблема в несоответствии SelStart c неюникодными версиями Delphi --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| CHERRY |
|
||||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Если ипользовать это для подсчета абзацев, то работает
Завтра попробую на более сложном тексте. Всем спасибо за участие. --------------------
Трясу надежды ветвь, но где желанный плод? |
||||||
|
|||||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
А в чём проблема взять и засунуть то что я написал в цикл где переменная будет пробегать всё от первой до последней строки и ни надо заморачиваться с символами конца строки Просто работать со свойством Text обычно несколько геморойно, т.к. надо следить за чудным(и) символом(ами) конца строки, а так никаких напрягов, и по количеству операций будет по моему работать одинаково. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |