У меня в RichEdit отображается документ с небольшими элементами форматирования, документ может быть длинным.
При определенных ситуациях какие-то строки в нем могут поменяться.
Мне нужно обновить документ, но чтобы визуально он не перекинулся на начало, а остался как есть, т.е. не двигался.
Накидал код:
void __fastcall TMainForm::ReViewDoc()
{
POINT pp;
SendMessage(RichEdit1->Handle, EM_GETSCROLLPOS, 0, (long)&pp);
RichEdit1->Lines->BeginUpdate();
ViewDocBtn(); // Отображение документа с настройкой кнопок
SCROLLINFO info = {sizeof(SCROLLINFO), SIF_ALL};
GetScrollInfo(RichEdit1->Handle, SB_VERT, &info);
int a = info.nMax - info.nPage; // Проблема: если скрол не активен, то его параметры как и у активного
if (pp.y > a)
pp.y = a;
SendMessage(RichEdit1->Handle, EM_SETSCROLLPOS, 0, (long)&pp);
RichEdit1->Lines->EndUpdate();
}
Но есть проблема, если документ был длинным, т.е. вертикальный скролл был активным, а потом стал коротким, вертикальный скролл перестал был активным, то функция GetScrollInfo() возвращает старые параметры, т.е. когда скролл еще был активным.
Возникает вопрос: как узнать, активен скролл или нет?