Jak przesunąć programowo scroll?
Należy wysłać do okna odpowiedni komunikat:
– WM_VSCROLL – aby przesunąć pionowy scroll,
– WM_HSCROLL – aby przesunąć poziomy scroll,
za pomocą funkcji SendMessage:
1 |
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); |
Pierwszy parametr to uchwyt okna, do którego ma zostać wysłany komunikat, następny – identyfikator komunikatu, kolejne dwa parametry to wartości, jakie będą wraz z komunikatem przesłane. W wParam prześlemy informację o tym, o ile chcemy przesunąć scroll, lParam nie będziemy używać. W przypadku komunikatów WM_VSCROLL i WM_HSCROLL przydatne będą takie opcje:
SB_BOTTOM | Przesuwa scroll do samego końca. |
SB_LINELEFT | Przesuwa scroll o jedną linię w lewo (lub w górę). |
SB_LINERIGHT | Przesuwa scroll o jedną linię w prawo (lub w dół). |
SB_PAGELEFT | Przesuwa scroll o jedną stronę w lewo (lub w górę). |
SB_PAGERIGHT | Przesuwa scroll o jedną stronę w prawo (lub w dół). |
SB_THUMBPOSITION | Przesuwa scroll do podanego miejsca. |
SB_TOP | Przesuwa scroll na sam początek. |
Przykład:
1 |
SendMessage(Memo1->Handle , WM_VSCROLL , SB_LINERIGHT , 0) ; |
lub:
1 |
SendMessage(Memo1->Handle , WM_VSCROLL , MAKELONG(SB_THUMBPOSITION , 10) , 0) ; |
Jak widać, jeżeli chcemy przesunąć scroll do danego miejsca, musimy 'skleić’ za pomocą MAKELONG dwie wartości ze sobą: SB_THUMBPOSITION oraz nową pozycję scrolla.
Jeżeli chcemy otrzymać aktualną pozycję scrolla, należy skorzystać z funkcji GetScrollPos:
1 2 3 |
GetScrollPos(Memo1->Handle , SB_VERT) ; // dla pionowego scrolla GetScrollPos(Memo1->Handle , SB_HERT) ; // dla poziomego scrolla |
Autor: Iskar