Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RichEdit - переместить курсор в последнюю позицию. [D7, XP]


JohnKorsh ©   (2010-11-02 10:51:00) 

Не поможет ли кто с RichEdit.
Хочу позиционировать курсор на последнее знакоместо последней введённой строки.
Программа заполняет RichEdit по мере надобности.
При запуске программы курсор остаётся в первой позиции первой строки.
Если вручную передвинуть его на последнюю позицию, или просто сдвинуть, то, делее ведёт себя как и
планировалось, т.е. перемещается после каждой записи в RichEdit в конец, прокручивая текст.

Где я ошибся - почему не перемещается в конец текста с самого начала?

// RE_Log - это RichEdit или Memo.

 var
  Vol, i                     : integer;

 begin

// Считаю, сколько всего символов в RichEdit.

  Vol := 0;
  for i := 0 to RE_Log.Lines.Count do
   begin
    Vol := Vol + length (RE_Log.Lines [i]);
   end;

// Двигаю в эту позицию курсор.

   RE_Log.SelStart := Vol;

  end;


JohnKorsh   (2010-11-02 13:33:00) [1]

Спасибо. Теперь работает так, как хотелось.


И. Павел   (2010-11-02 12:48:00) [2]

Можно слать сообщение:
RE_Log.Perform(EM_LINESCROLL, 0, RE_Log.Lines.Count - 1);


JohnKorsh   (2010-11-02 12:36:00) [3]

Я рано обрадовался. Ваш код, конечное быстрее, но эффект сохранился.

Чего хочу - автоматически позиционировать на последнюю строку. И чтобы введённый текст сдвигался по мере накопления.
При запуске этого не происходит. Строки добавляются, уменьшается движок ScrolBar, текст остаётся на месте - видны по-прежнему первые строки.

Если в процессе работы программы вручную с использованием ScrollBar передвинуть позицию так, чтобы была видна последняя строка, то всё работает - по мере добавления строк они прокручиваются, показывая последнюю добавленную.  
RE_Log.SelStart получает значение введённого объема текста в любом случае, но не сдвигает текст.

Как мне грамотно исправить код?


JohnKorsh   (2010-11-02 11:40:00) [4]

Спасибо.


И. Павел   (2010-11-02 11:20:00) [5]

Точнее так:
Vol := length(RE_Log.Text) - 2 * RE_Log.Lines.Count
if RE_Log.Text[Length(RE_Log.Text) - 1] = chr(13) then Vol := Vol - 2;


И. Павел   (2010-11-02 11:15:00) [6]

> Vol := 0;
>  for i := 0 to RE_Log.Lines.Count do
>   begin
>    Vol := Vol + length (RE_Log.Lines [i]);
>   end;


Vol := length(RE_Log.Text)

Если нужно без символов перехода на новую строку, то:

Vol := length(RE_Log.Text) - 2 * (RE_Log.Lines.Count - 1);


Наверх

Титульная страница Поиск, карта сайта Написать письмо