Проблема с ScrollBy в TRichEdit
Скролю текст, обрабатывая событие OnMouseWheel:
Исходное состояние TRichEdit
После нескольких поворотов колеса:
[FONT=courier new]
code:
void __fastcall TMainWindow::ChWheel(TObject *Sender, TShiftState Shift,
int WheelDelta, TPoint &MousePos, bool &Handled)
{
int Delta = 1; // Сдвиг SCROLLBAR
int ScDelta = 10; // Сдвиг текста в RICHEDIT
// Проверяем было ли прокручено колесо и
// Не выходит ли полоска CSCROLLBAR за
// обозначенные границы (scY01; scY02)
// Для сдвига вниз
if ((WheelDelta < 0) && (btnScrollBar->Top + Delta <= scY02))
{
// Сдвигаем полоску SCROLLBAR
btnScrollBar->Top += Delta;
// Cкролим текст в RICHEDIT
TextField->ScrollBy(0, -ScDelta);
}
// SCROLLBAR занимает одно из крайних положений
else
{
if (WheelDelta < 0)
{
btnScrollBar->Top = scY02;
}
}
// Для сдвига вверх
if (WheelDelta > 0 && (btnScrollBar->Top - Delta >= scY01))
{
//Сдвигаем полоску SCROLLBAR
btnScrollBar->Top -= Delta;
//Cкролим текст в RICHEDIT
TextField->ScrollBy(0, ScDelta);
}
// SCROLLBAR занимает одно из крайних положений
else
{
if (WheelDelta > 0)
{
btnScrollBar->Top = scY01;
}
}
}
[/FONT]
Все эти запары мне нужны для того, чтобы организовать свой скроллинг.
Почему же текст скроллится так поуродски? Была идея использовать TRichEdit->Repaint(), но он перерисовывает, и помещает скролл в начало =(
Заранее спасибо)
SendMessage(TextField->Handle,WM_VSCROLL,SB_LINEUP,0);
SendMessage(TextField->Handle,WM_VSCROLL,SB_LINEDOWN,0);
=)