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

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

Автоматическая прокрутка в TRichEdit глючит с RTF [D3]


SuperVK ©   (2002-11-11 12:17:00) 

У меня есть TRichEdit со скроллбарами. Хочу прокрутить TRichEdit
немного вниз и вправо. Для этого делаю следующее:


var
ScrollMessage:TWMVScroll;
begin
ScrollMessage.Msg:=WM_VSCROLL;
ScrollMessage.ScrollCode:=SB_LINEDOWN;
Editor.Dispatch(ScrollMessage);

ScrollMessage.Msg:=WM_HSCROLL;
ScrollMessage.ScrollCode:=SB_LINEDOWN;
Editor.Dispatch(ScrollMessage);


Так вот после первых трех строк процедуры контрол действительно смещается вниз, но при выполнении следующих стрёх возвращается на исходную позицию (т.е. поднимается наверх) и лишь затем смещается вправо.

Если же первые три строки повторить два раза:


var
ScrollMessage:TWMVScroll;
begin
ScrollMessage.Msg:=WM_VSCROLL;
ScrollMessage.ScrollCode:=SB_LINEDOWN;
Editor.Dispatch(ScrollMessage);

ScrollMessage.Msg:=WM_VSCROLL;
ScrollMessage.ScrollCode:=SB_LINEDOWN;
Editor.Dispatch(ScrollMessage);

ScrollMessage.Msg:=WM_HSCROLL;
ScrollMessage.ScrollCode:=SB_LINEDOWN;
Editor.Dispatch(ScrollMessage);


,то смещается как надо. Как устранить то что после смещения вниз, а затем вправо отменяется перемещение вниз.
Может я чего-нибудь не так делаю?

Особенно занимательно то, что у меня это проявляется только с текстами, содержащими RTF, а с теми, которые содержат неформатированный текст этого не происходит, т.е. всё работает правильно.


SuperVK   (2002-11-15 12:20:00) [1]

По поводу EM_* сообщений:
Пробовал через EM_SCROLL - не помогло. И вообще в MSDN по поводу EM_SCROLL сказано "This message is equivalent to sending a WM_VSCROLL message to the edit control". И разве можно с помощью EM_* сделать скроллинг по горизонтали?

По поводу скролла:
Я перед прокруткой устанавливал курсор в любую позицию, например в середину текста, это не дало результата. И вообще как-то странно себя ведёт прокрутка, после первого сообщения EM_SCROLL он (RichEdit) прокручивается на строку, после второго на чуть-чуть (ощущение, что на межстрочное расстояние и, видимо, поэтому при сдвиге вправо возвращается на строку вверх). Иногда работает как положено - сразу переходит на следующую строку, пропуская межстрочное расстояние.

PS: Намучался я с этими скроллами, может посоветуешь, как можно попробовать организовать такую штуку: два TRichEdit"а содержащие один и тот же текст располагаются так: один выглядывает из под другого, причем один может прокручиваться вверх, вниз, влево и вправо, а другой только вверх и вниз и надо чтобы по вертикали они перемещались синхронно, т.е. если один поехал вверх, то и другой тоже.
Если делать как я пытаюсь: посылать одинаковые сообщения для вертикальной прокрутки, то после прокрутки вниз, а затем вправо второго RichEdit, он смещается только вправо, а первый смещается вниз и у них получается разный сдвиг по вертикали...


Song   (2002-11-11 13:13:00) [2]

Я думаю, что скролин срабатывает от текущей позиции курсорва. В первом примере Вы просто передвинули скролы, а курсор-то остался на своём месте. Поэтому возможно во втором случае, он сначала возращается к первоначальной позиции.
К тому же с multi-edit контролами лучше работать через EM сообщения.


Наверх

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