Конференция "WinAPI" » SetScrollInfo и SetScrollPos не прокручивают текст внутри окна.
 
  • misha_gr (04.03.08 20:56) [0]
    SetScrollPos(ListBox1.Handle, SB_Vert, 50, true);

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

    В чём же здесь собака порылась?
  • Игорь Шевченко © (04.03.08 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 (05.03.08 13:57) [2]
    Разве логично, что управляя движением скроллбара, я не управляю скроллингом окна? Ладно, вопрос риторический. А как прокрутить содержимое окошка? Если использовать напрашивающуюся функцию ScrollWindow - он не прорисовывает область сдвинувшуюся извне внутрь ClipRect. Плюс, команда рефреш возвращает всё в исходное положение. (то есть, бегунки установились).

     Вообще, может я не с той стороны к вопросу подхожу? Мне нужно программно управлять скроллингом окна.
  • Игорь Шевченко © (05.03.08 14:52) [3]

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


    Обрабатывать сообщения WM_VSCROLL, WM_HSCROLL - они приходят, в частности от скроллбара.
    В ответ на эти сообщения вызывать ScrollWindow - примеров в VCL море
  • misha_gr (05.03.08 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 (05.03.08 16:09) [5]
    > стандартные компоненты - уточню, стандартные виндовские компоненты.
  • Сергей М. © (05.03.08 16:33) [6]

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


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

    А главный твой "клиент" - TScrollBox.
  • misha_gr (05.03.08 18:21) [7]
    Уважаемые Мастера. Боюсь что в данном случае Вы ошибаетесь. То что работает с TScrollBox со стандартными виндовыми компонентами работать не будет.
  • Игорь Шевченко © (05.03.08 22:32) [8]

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


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

    ScrollWindow они сами выполняют.
 
Конференция "WinAPI" » SetScrollInfo и SetScrollPos не прокручивают текст внутри окна.
Есть новые Нет новых   [134431   +15][b:0][p:0]