2008. szeptember 21., vasárnap
Scroll a TForm through code
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.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése