Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-82692
bondik
2002-11-14 16:03
2002.11.25
Вопрос


3-82623
mas_alexey
2002-11-05 11:00
2002.11.25
Interbase


3-82600
dim-
2002-11-04 11:47
2002.11.25
автоподставление


14-82910
MixerPro
2002-11-05 08:32
2002.11.25
Начинаю писать на IBase


14-82957
Shadow
2002-11-05 17:11
2002.11.25
Какого хЋкcвЋрfsиhjf!,AЋ?.иH




   Наверх