Вниз
Скачать: CL | DM;

SetScrollInfo и SetScrollPos не прокручивают текст внутри окна.   Найти похожие ветки 

← →
misha_gr   (2008-03-04 20:56) [0]

SetScrollPos(ListBox1.Handle, SB_Vert, 50, true);

Бегунки передвигаются, но текст внутри окна не скроллится. Ровно такая же ситуация для TRichEdit и TMemo.

В чём же здесь собака порылась?


← →
Игорь Шевченко ©   (2008-03-04 21:46) [1]

The SetScrollPos function sets the position of the scroll box (thumb) in the specified scroll bar and, if requested, redraws the scroll bar to reflect the new position of the scroll box.

Перевод нужен ?


← →
misha_gr   (2008-03-05 13:57) [2]

Разве логично, что управляя движением скроллбара, я не управляю скроллингом окна? Ладно, вопрос риторический. А как прокрутить содержимое окошка? Если использовать напрашивающуюся функцию ScrollWindow - он не прорисовывает область сдвинувшуюся извне внутрь ClipRect. Плюс, команда рефреш возвращает всё в исходное положение. (то есть, бегунки установились).

 Вообще, может я не с той стороны к вопросу подхожу? Мне нужно программно управлять скроллингом окна.


← →
Игорь Шевченко ©   (2008-03-05 14:52) [3]


> Мне нужно программно управлять скроллингом окна.


Обрабатывать сообщения WM_VSCROLL, WM_HSCROLL - они приходят, в частности от скроллбара.
В ответ на эти сообщения вызывать ScrollWindow - примеров в VCL море


← →
misha_gr   (2008-03-05 16:06) [4]

> Обрабатывать сообщения WM_VSCROLL, WM_HSCROLL - они приходят, в
> частности от скроллбара. В ответ на эти сообщения вызывать
> ScrollWindow - примеров в VCL море

Сделал поиск по ..\Delphi\Source - ScrollWindow используется в Grids, DBGrids. Не мои клиенты.

Дело в том, что я использую стандартные компоненты, TListBox, TRichEdit, TMemo, и их скроллингом мне нужно управлять программно. Соответственно, по моему скромному AFAIK, их сообщения мне совершенно незачем обрабатывать - у них свой собственный обработчик, (причём не в VCL ессно).

В принципе, для TListBox и TMemo проблема решается так -

SendMessage(Memo1.Handle, WM_HSCROLL, SB_LINERIGHT, 0);
SendMessage(Memo1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

С TRichEdit помогает не всегда, он может скролиться попиксельно. Всякие
SB_THUMBPOSITION самым доблестным образом не работают.

Короче, тут явно какая-то подлянка, и не всё так просто как кажется...


← →
misha_gr   (2008-03-05 16:09) [5]

> стандартные компоненты - уточню, стандартные виндовские компоненты.


← →
Сергей М. ©   (2008-03-05 16:33) [6]


> Не мои клиенты


Твои, уважаемый.. Твои ...

А главный твой "клиент" - TScrollBox.


← →
misha_gr   (2008-03-05 18:21) [7]

Уважаемые Мастера. Боюсь что в данном случае Вы ошибаетесь. То что работает с TScrollBox со стандартными виндовыми компонентами работать не будет.


← →
Игорь Шевченко ©   (2008-03-05 22:32) [8]


> Дело в том, что я использую стандартные компоненты, TListBox,
>  TRichEdit, TMemo, и их скроллингом мне нужно управлять
> программно. Соответственно, по моему скромному AFAIK, их
> сообщения мне совершенно незачем обрабатывать


Тогда их надо посылать. Или посылать специфические для контролов сообщения, EM_xxxSCROLL, LB_SETCURSEL и т.п., что и делается в [4]

ScrollWindow они сами выполняют.



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

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



Память: 0.47 MB
Время: 0.008 c
2-1229785639
neveGreen
2008-12-20 18:07
2009.02.01
совместимость версий Делфи


3-1214304824
umbra
2008-06-24 14:53
2009.02.01
как правильно перенести базу?


3-1213899571
SuperChel
2008-06-19 22:19
2009.02.01
Запрос на SQL для выборки иерархического списка


1-1206708636
Jolik
2008-03-28 15:50
2009.02.01
какие накладные расходы у try except end?


11-1197054692
Vinum
2007-12-07 22:11
2009.02.01
Как в перемен. типа PGif загрузить из перемен. типа TStringStream




   Наверх