Активный скролл или нет в RichEdit
От: lsv  
Дата: 07.11.19 10:30
Оценка:
У меня в 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() возвращает старые параметры, т.е. когда скролл еще был активным.
Возникает вопрос: как узнать, активен скролл или нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.