![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Взять Items[i] как из RichEdit RTF-строку
=BuckLr= © (2007-06-22 13:08:00)Задача - взять целую строку из RichEdit в формате Rich Text, но НЕ используя выделение при помощи SelStart-SelLength + RE_Text[reRTF, True] и иже с ними...
Что подскажете? Может, есть какие-то АПИ для этого?
Vladimir Kladov (2007-06-23 11:29:00) [1]Вот, нашел: EM_GETSCROLLPOS and EM_SETSCROLLPOS. Начиная с RichEdit3.0 вроде бы. Сейчас попробую с ними.
Vladimir Kladov (2007-06-23 11:23:00) [2]Я попробовал сделать тройку методов. Сейчас положу, посмотрите. В richedit после скролла вертикального (за тумбу на скролле мышкой) верхняя строка может отображаться частично. Восстановление приводит к небольшому спрыгу, чтобы показывалась целая (следующая) строка. Кроме того, в RichEdit не удается восстановить горизонтальную позицию скролла, в нем EM_LINESCROLL не работает для горизонтальной прокрутки. И ничего вообще нет для горизонтальной прокуртки, кроме EM_SCROLLCARET, а это все равно прыг. Попытка обратиться к непосредственно прокруткам контрола для RichEdit тоже ничего не дает: прокрутки позицию меняют, но это не влияет на сам RichEdit.
=BuckLr= (2007-06-23 10:23:00) [3]
> Да, действительно ускакивает куда попало
:) а я думал, что от моих манипуляций (у меня там курсор по всму экрану ездит) :)
> по окончании операции целый цикл организовывать, чтобы
> вернуть изображение туда же
А по-моему, проще будет поставить туда курсор и что-то типа EM_SCROLLCARET. Или SetScrollPos, только я не знаю, как оно работает, не сталкивался.
Vladimir Kladov (2007-06-23 09:15:00) [4]Да, действительно ускакивает куда попало. Чтобы восстановить хотя бы приблизительно в ту же позицию, надо EM_CHARFROMPOS, 0, 0 - запомнить позицию символа, ближайшего к верхнему левому углу, а по окончании операции целый цикл организовывать, чтобы вернуть изображение туда же.
=BuckLr= (2007-06-22 22:50:00) [5]
> Вроде не должен уходить, с чего бы это
с того, что мне приходится менять положение каретки - при таком подходе это обязательно. Ну да ладно, проблему решим.
Vladimir Kladov (2007-06-22 20:41:00) [6]Вроде не должен уходить, с чего бы это. Если не использовать EM_SCROLL, EM_SCROLLCARET, то не должен только при изменении выделения.
=BuckLr= (2007-06-22 20:36:00) [7]
> никто ничего и не заметит
да, я так и делаю. Правда, скроллинг всё равно уходит не туда, где был, но это мелочь... В общем, думал, что есть какой-то магический способ :)
Vladimir Kladov (2007-06-22 17:22:00) [8]Нет, выделение это и есть стандартный способ. Если выделение устанавливать временно, а затем восстанавливать, то никто ничего и не заметит. На случай длинных операций есть beginupdate/endupdate.