psa1974
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору DmitryKz Цитата: Насколько я понимаю, тут должны использоваться винапишные функции | Ага ж и сообщения тоже . По другому никак. Цитата: Безусловно, плавная прокрутка - лучше, например так: Код: const EM_GETSCROLLPOS = WM_USER + 221; EM_SETSCROLLPOS = WM_USER + 222; procedure TForm4.Timer1Timer(Sender: TObject); var pt: TPoint; si: TScrollInfo; i: Integer; begin si.cbSize:= SizeOf(TScrollInfo); si.fMask:= SIF_PAGE or SIF_POS or SIF_RANGE; GetScrollInfo(RichEdit1.Handle, SB_VERT, si); if ((si.nPage > 0) and (si.nPos + si.nPage < si.nMax)) then // nPage - размер страницы текста в пикселях // nMax - размер всего текста в пикселях begin SendMessage(RichEdit1.Handle, EM_GETSCROLLPOS, 0, LPARAM(@pt)); pt.Y:= pt.Y+ SpinEdit1.Value; SendMessage(RichEdit1.Handle, EM_SETSCROLLPOS, 0, LPARAM(@pt)); end; end; | Но тут есть одно серьезное ограничение: высота всего прокручиваемого текста в пикселях не должна превышать 65535 пикселей. Кстати, в Дельфи штатно эти сообщения (EM_GETSCROLLPOS и EM_SETSCROLLPOS) не описаны видимо из-за этих ограничений. Ну и каретка в этом примере не перемещается... Добавлено: DmitryKz Если же скроллировать построчно, этого ограничения нет: // Крутим текст построчно: SendMessage(RichEdit1.Handle, EM_SCROLL, SB_LINEDOWN, 0); ЗЫ: Когда-то писал плагин для Akelpad, который при нажатии Ctrl+Down/Up выполняет скроллинг текста по аналогии с дельфийским редактором. Если надо, могу кинуть исходники, там все прокомментировано ЗЫ2: А вообще RichEdit - геморный элемент управления, все в нем сделано через задницу, особенно этот самый скроллинг. | Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 22:47 30-11-2009 | Исправлено: psa1974, 23:07 30-11-2009 |
|