Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.25;
Скачать: CL | DM;

Вниз

Автоматическая прокрутка в TRichEdit глючит с RTF   Найти похожие ветки 

 
SuperVK ©   (2002-11-11 12:17) [0]

У меня есть 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, а с теми, которые содержат неформатированный текст этого не происходит, т.е. всё работает правильно.


 
Song ©   (2002-11-11 13:13) [1]

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


 
SuperVK ©   (2002-11-15 12:20) [2]

По поводу 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, он смещается только вправо, а первый смещается вниз и у них получается разный сдвиг по вертикали...



Страницы: 1 вся ветка

Текущий архив: 2002.11.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-82834
hogo
2002-11-11 06:39
2002.11.25
Нарисовать поверх


1-82754
Igorek
2002-11-15 13:44
2002.11.25
Простой вопрос


1-82835
Vovaka
2002-11-14 10:09
2002.11.25
Как закрыть все формы, кроме основной ?


1-82698
AlexT1000
2002-11-14 16:24
2002.11.25
как узнать имена всех классов существующих в программе?


6-82892
HelpMy
2002-09-17 07:11
2002.11.25
Как программно открыть/закрыть доступ к диску (папке)?