Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2017, 14:24   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Автоматическая прокрутка в memo

Привет.

Нужно реализовать сей механизм работы, но в процессе выяснилось, что изначально это не предусмотрено.

Поэтому было решено реализовать прокрутку компонента мемо, так:

Код:
SendMessage(memo.Handle, EM_LINESCROLL, 0,5);
Где 5 - является номером строки, до которой нужно прокрутить скроллбар.

Но дело в том, что не могу придумать, как вычислить число строк, которые уже были прокручены пользователем, чтобы, допустим, при открытии программы, вернуть его в эту позицию снова.

Есть идеи?!
bilibian вне форума Ответить с цитированием
Старый 19.08.2017, 19:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

memo.SelStart
eoln вне форума Ответить с цитированием
Старый 19.08.2017, 21:29   #3
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
memo.SelStart
Ваш вариант показывает позицию курсора в виде количества символов от начала, до самой позиции. Не совсем то, что нужно.

Код:
CaretPos.Y
Использовал данный вариант, таким образом получаю позицию строки в мемо, на которой стоит курсор. Не идеальный вариант, но более менее.

В идеале, хотелось бы получить число строк в мемо, которые уже были промотаны скроллбаром, но увы и ах.
bilibian вне форума Ответить с цитированием
Старый 19.08.2017, 21:59   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Ну да, можно выделить 0 буков с позиции SelStart и тогда мемо прокрутится в нужное место, а при прокрутке сдвигать курсор на верхнюю строчку (позицию в этой строчке)
eoln вне форума Ответить с цитированием
Старый 20.08.2017, 00:35   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Узнать номер строки, где сейчас курсор:
LineNum := Memo1.Perform(EM_LINEFROMCHAR, -1, 0);

Установить содержимое так, чтобы была видна эта строка:
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, Memo1.Lines.Count-1-LineNum);
Второе мной не проверено.

Цитата:
чтобы, допустим, при открытии программы, вернуть его в эту позицию снова
Вам уже подсказали:
with Memo do
SelStart := Perform(EM_LINEINDEX, LineNum, 0) + CharIndex(это при желании установить еще и на символ);

Последний раз редактировалось kropotkina-alice; 20.08.2017 в 00:39.
kropotkina-alice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая прокрутка ser70 Общие вопросы C/C++ 3 14.10.2014 22:32
Автоматическая прокрутка JQ карусели supermike JavaScript, Ajax 5 18.09.2013 15:20
Прокрутка в Memo Freestyler Помощь студентам 3 02.12.2008 21:19
Прокрутка в Memo KlErik Компоненты Delphi 2 29.05.2007 22:00