RichEdit VCL и URL-адреса. Обходные пути для проблем с OnPaint

Моя проблема связана с тем, что программисты Delphi пугают до смерти - Rich Edit в Windows (версии XP и до XP).

Ситуация:

Я добавил EM_AUTOURLDETECTION в OnCreate формы. Цель -> RichEdit1. Затем у меня есть форма, которая "сворачивается" после показа формы. RichEdit Control является неактивным, видимым и включенным, но он «скрыт», потому что окно формы свернуто.

Я могу разворачивать и сворачивать форму, используя Button1 и изменяя свойства форм Constraints и Size.

После первого раскрытия формы URL-адрес внутри элемента управления RichEdit1 выделяется. Но после второго, третьего, четвертого и т. Д. Раз, когда я сворачиваю и разворачиваю форму, элемент управления RichEdit1 больше не выделяет URL.

Я пробовал сообщения EM_SETTEXTMODE, также WM_UPDATEUISTATE, а также базовое сообщение WM_TEXT -> не повезло. Похоже, что это слияние действительно работает (включает обнаружение) при отправке нажатий клавиатуры (виртуальных кодов клавиш), но не когда текст был изменен. Также - я думаю переписать код, чтобы сделать RichEdit Control динамичным. Решит ли это проблему?

Может быть, решение состоит в том, чтобы переопределить метод OnPaint / OnDraw, чтобы избежать потери выделения (форматирования) при сворачивании или расширении формы?

Странно то, что в моей документации Embarcadero говорится, что эта функция должна работать в любой момент, когда текст был изменен. Почему не работает?

Любая помощь приветствуется. Я делаю эту вики Сообщества, потому что это обычная проблема, и вместе мы сможем найти решение, верно? :)

Также - дальнейшие действия и связанный с этим вопрос:

Переопределить OnPaint

Как автоматически определять URL-адреса в RichEdit 2.0?

http://www.vbforums.com/archive/index.php/t-59959.html


person Community    schedule 31.01.2010    source источник


Ответы (1)


Я не уверен, но воссоздается ли окно richedit при переходе от скрытия к отображению? В этом случае вы можете создать свой собственный производный класс TRichEdit, переопределите функцию, которая создает дескриптор WIndows (TWinControl.CreateHandle), и добавьте туда EM_AUTOURLDETECTION.

person Community    schedule 31.01.2010