![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);