Здравствуйте!
Собственно, сабж в названии: нужно узнать индекс (номер) строки, в которой произошли изменения в RichEdit.
Агоритм должен быть быстрый.
Заранее спасибо.
Этот топик читают: Гость
Ответов: 1173
Рейтинг: 49
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Ex_ писал(а): Агоритм должен быть быстрыйНет уж, будьте добры берите что дают ![]() ------------ Дoбавленo в 13.24: Схема простейшая, не считает добавление строки изменением. |
|||
карма: 1 |
| ||
файлы: 1 | code_28182.txt [1KB] [111] |
Ответов: 1173
Рейтинг: 49
|
|||
1nd1g0, спасибо, но есть небольшая проблема -- при переводе каретки первый символ не засчитывается.
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Ex_ писал(а): при переводе каретки первый символ не засчитываетсяЕстественно, это и считается созданием строки, можно добавить отслеживание создания новых строк и синхронизировать списки, тогда первичное заполнение тоже будет учитываться. Вообще всё зависит от того, как у Вас изменяют строки, если только вручную, то у текстовых контролов, в принципе, можно попробовать выявить текущую строку редактирования и считать её изменённой, что быстрее сравнений, но не так универсально. И RichEdit не имеет штатного атрибута номера текущей строки, позиция курсора измеряется в символах от начала всего текста. |
|||
карма: 1 |
|
Ответов: 1173
Рейтинг: 49
|
|||
1nd1g0, попробовал так, но что-то не работает:
code_28184.txt ------------ Дoбавленo в 14.03: Кстати, у RE есть точка EndIdx, но в pas-нике её нет ![]() |
|||
карма: 0 |
| ||
файлы: 1 | code_28184.txt [1.1KB] [66] |
Ответов: 3889
Рейтинг: 362
|
|||
Ex_ писал(а): в pas-нике её нетОна унаследована у EWinList (который её унаследовал от WinList и т.д. и т.п.). |
|||
карма: 1 |
|
Ответов: 1173
Рейтинг: 49
|
|||
Всё, понял: нужно организовать список/массив, записывать Position, как увеличится EndIdx -- записывать в новую строку/элемент, затем при проверке смотреть, в какой строке/элементе лежит нужный Position. Как сделаю, выложу.
------------ Дoбавленo в 15.01: Подскажите, кто-нибудь, в чём проблема?
|
|||
карма: 0 |
|
Ответов: 1821
Рейтинг: 168
|
|||
Ex_, уточните - какая проблема и что должно быть.
|
|||
карма: 5 |
|
Ответов: 1173
Рейтинг: 49
|
|||
sаmakacd, должно выдавать сохранённый в массиве Position, а индекс (откуда брать значение) должно брать из ЭдитБокса.
[flood] sаmakacd писал(а): какя![]() |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Ex_, У Вас постоянно "сбрасывается" GetIndexData даже при простом движении курсора в RichEdit (появляется событие onChange).
|
|||
карма: 1 |
|
Ответов: 1173
Рейтинг: 49
|
|||
1nd1g0 писал(а): У Вас постоянно "сбрасывается" GetIndexData |
|||
карма: 0 |
|
Ответов: 8961
Рейтинг: 824
|
|||
Ex_,
1) Запоминать положение курсора при редактировании и смысла нет, т. к. длина строки меняется, и запомненные положения его за местом редактирования не соответствуют действительности ![]() 2) В RichEdit количество строк (точка внизу) считается не по символам 10 и 13, а по видимому разбиению строк и тоже изменяется при именении размеров RichEdit-а ![]() Логика работы должна это учитывать ![]() ------------ Дoбавленo в 16.13:
Кстати, просто установка курсора на поле тоже вызывает событие onChange ![]() |
|||
карма: 19 |
|
Ответов: 1173
Рейтинг: 49
|
|||
Леонид, что-то не пойму, как ваша схема работает
![]() |
|||
карма: 0 |
|
Ответов: 8961
Рейтинг: 824
|
|||
Ex_, в массив запоминаются положения курсора при внесении изменений. Посмотреть их можно по индексу в Edit нажав Enter.
Два последних события запоминаются в MemFifo и их неравенство соответствуют изменению и положение курсора добавляется в массив. Вот ещё схемка по подсчёту строк в RichEdit-е: code_28191.txt |
|||
карма: 19 |
| ||
файлы: 1 | code_28191.txt [2.3KB] [153] |
Ответов: 1173
Рейтинг: 49
|
|||
Леонид, спасибо, однако, не думал, что понадобятся такие вот "пляски"
![]() Тема закрыта. |
|||
карма: 0 |
|
15