![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetScrollInfo и SetScrollPos не прокручивают текст внутри окна.
misha_gr © (2008-03-04 20:56:00)SetScrollPos(ListBox1.Handle, SB_Vert, 50, true);
Бегунки передвигаются, но текст внутри окна не скроллится. Ровно такая же ситуация для TRichEdit и TMemo.
В чём же здесь собака порылась?
Игорь Шевченко (2008-03-05 22:32:00) [1]
> Дело в том, что я использую стандартные компоненты, TListBox,
> TRichEdit, TMemo, и их скроллингом мне нужно управлять
> программно. Соответственно, по моему скромному AFAIK, их
> сообщения мне совершенно незачем обрабатывать
Тогда их надо посылать. Или посылать специфические для контролов сообщения, EM_xxxSCROLL, LB_SETCURSEL и т.п., что и делается в [4]
ScrollWindow они сами выполняют.
misha_gr (2008-03-05 18:21:00) [2]Уважаемые Мастера. Боюсь что в данном случае Вы ошибаетесь. То что работает с TScrollBox со стандартными виндовыми компонентами работать не будет.
Сергей М. (2008-03-05 16:33:00) [3]
> Не мои клиенты
Твои, уважаемый.. Твои ...
А главный твой "клиент" - TScrollBox.
misha_gr (2008-03-05 16:09:00) [4]> стандартные компоненты - уточню, стандартные виндовские компоненты.
misha_gr (2008-03-05 16:06:00) [5]> Обрабатывать сообщения 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 самым доблестным образом не работают.
Короче, тут явно какая-то подлянка, и не всё так просто как кажется...
Игорь Шевченко (2008-03-05 14:52:00) [6]
> Мне нужно программно управлять скроллингом окна.
Обрабатывать сообщения WM_VSCROLL, WM_HSCROLL - они приходят, в частности от скроллбара.
В ответ на эти сообщения вызывать ScrollWindow - примеров в VCL море
misha_gr (2008-03-05 13:57:00) [7]Разве логично, что управляя движением скроллбара, я не управляю скроллингом окна? Ладно, вопрос риторический. А как прокрутить содержимое окошка? Если использовать напрашивающуюся функцию ScrollWindow - он не прорисовывает область сдвинувшуюся извне внутрь ClipRect. Плюс, команда рефреш возвращает всё в исходное положение. (то есть, бегунки установились).
Вообще, может я не с той стороны к вопросу подхожу? Мне нужно программно управлять скроллингом окна.
Игорь Шевченко (2008-03-04 21:46:00) [8]The SetScrollPosfunction sets the position of the scroll box (thumb) in the specified scroll barand, if requested, redraws the scroll bar to reflect the new position of the scroll box.
Перевод нужен ?