Scroll a TForm through code (Views: 31)
Problem/Question/Abstract: I'm using a form with a TPaintBox element that exceeds the size of the form, so the form has two scrollbars. I want the user to be able to scroll the form using the keyboard (with cursor keys). How can I perform scrolling programmatically? I tried using the TForm.ScrollBy method, but the results are a bit strange. Answer: Do not use ScrollBy, instead send WM_VSCROLL messages to the form to make it do the work for you. procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_DOWN: {scroll down} begin Perform(WM_VSCROLL, SB_LINEDOWN, 0); Perform(WM_VSCROLL, SB_ENDSCROLL, 0); end; VK_UP: {scroll up} begin Perform(WM_VSCROLL, SB_LINEUP, 0); Perform(WM_VSCROLL, SB_ENDSCROLL, 0); end; end; end; If you use ScrollBy you also have to manually adjust the scrollbar position since it only scrolls the windows client area, completely independent of any scrollbar. |