powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / TRichEdit + подсветка синтаксиса
19 сообщений из 19, страница 1 из 1
TRichEdit + подсветка синтаксиса
    #32273873
m-j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m-j
Гость
Здравствуйте, господа кодеры.
Может не в тему вопрос, но...
Кто нть знает, как можно реализовать подсветку синтаксиса.
Заранее спасибо!
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32274637
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос интересный. в примерах что с билдером идут что то есть, но там какие то забубенные вызовы и которые к тому же заточены для работы с выделенным блоком ... подробнее разобраться небыло времени :((
так что я тоде присоединяюсь к вопросу. и тоже буду благодарен если кто поделится ;)
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32301617
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На onChange или EN_CHANGE парсить текст и с помощью EM_EXSETSEL & EM_SETCHARFORMAT устанавливать цвет нужных слов...
Если запоминать предыдущее положение курсора (EN_SELCHANGE) и сравнивать с текущим можно сущесвенно сузить текст для просмотра...

плюсы - относительно простая реализация
минусы:
мерцание, можно уменьшить до минимума, но не избавиться, где то слышал, что это связано с медленной работой EM_SETCHARFORMAT.

геморой с undo/redo все изменения выделения и изменения шрифта поппадают в буфер

различная реализация сообщений для разных версий RichEdit'а

2ой путь обработка WM_PAINT и своими ручками перерисовывать окно
К сожалению я ещё не разобрался в нём, но ИМХО более перспективный путь, хотя и более геморойный, и в принципе не требует RichEdit вполне хватит и Memo...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32301968
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>как можно реализовать подсветку синтаксиса
ну например так:

Код: plaintext
1.
2.
3.
 TRichEdit->SelStart =  5 ;      // начало выделения
 RichEdit1->SelLength =  10 ;    // длина выделения
 RichEdit1->SelAttributes->Color = clRed; // сделать этот кусок красным
И здесь, как ты понил, буквы с 5 по 15 станут красными.

Кроме цвета можно ещё подсветить:

Код: plaintext
1.
2.
3.
4.
 TRichEdit->SelAttributes->Name =    // другим шрифтом
 RichEdit1->SelAttributes->Style =   // жирным например или курсивом
 RichEdit1->SelAttributes->Size =    // размером
 RichEdit1->SelAttributes->Charset = // кодировкой :)

Тока одно но.
После изменения текста в RichEdit1 вся эта красочная подсветка пропадёт :((.
По-этому нужно сначала полностью его заполнить а потом разукрашивать.

...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32301973
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 DarkCat
а я как-то не так сказал?

>Тока одно но.
>После изменения текста в RichEdit1 вся эта красочная подсветка пропадёт :((.
>По-этому нужно сначала полностью его заполнить а потом разукрашивать.

разве... у меня по всей видимости устаревшая информация, но такой эфект не наблюдаю

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32302046
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Sfagnum,
Как я понил, человек работает с T RichEdit. Это оболочка стандартного RichEdit. Живёт она в BCBuilder-овской библиотеке VCL.

>но такой эфект не наблюдаю
У меня информация самая свежая :). По крайней мере в VCL последней версии со всеми сервиспаками именно так. А вот как в MFC - низнаю и врать не буду.

2m-j,
Будь, пожалуйста, попросторней в своих сообщениях, желательно всё-таки указывать среду.
А вообще, все BCBuilder-овцы сидят в дельфийском форуме, потому что там народу больше и вопросы те же (VCL-то у Билдера и Дельфи одна)


...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32302473
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 DarkCat
Я ни про VCL, ни про MFC врать не буду, извении если ошибся.
Я прсто про стандартный RichEdit говорил...

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32302602
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 DarkCat
DarkCat писал:Тока одно но.
После изменения текста в RichEdit1 вся эта красочная подсветка пропадёт :((.
По-этому нужно сначала полностью его заполнить а потом разукрашивать.

Да гонишь ты все. Из 5го билдера TRechEdit вполне адекватно работает. Разукрашиваешь, а потом редактируешь и там где по логиге должно быть разукрашено там и получается разукрашено.
Под 6й билдер перекомпилить проект руки не дошли, но я уверен что и там все нормально будет.
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32302802
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 много цифр

редактируешь руками? Тогда может быть.
Я говорю о заполнении TRichEdit програмно.
Надо тебе например взять из базы несколько варчаров и клобов и сложить из них в TRichEdit заголовок, тему и текст какой-нибудь например статьи и подсветить ключевые слова в тексте.
Если ты вытащишь заголовок, разукрасишь его жирным например, а потом добавишь к этой строчке текст статьи то форматирование заголовка исчезнет.
По-этому я так делал: заполнял весь TRichEdit, при этом запоминал положения/размер всех заголовков/тем/ключевых слов. А потом только разукрашивал.

и ещё: Я никада не гоню. Если я сомневаюсь, я об этом прямо говорю.

...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32302980
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не спорьте горячие эстонские парни...
ну работает так у DarkCat ну и свечи ему от гемороя (эт я не со зла...)

Лучше посмотрите у себя номерок константы SES_EMULATESYSEDIT и если есть поделитесь
подрбности:
EM_SETEDITSTYLE Message

Message Information

Header Declared in Richedit.h
Minimum operating systems Windows 95 with Rich Edit 3.0, Windows NT 4.0 with Rich Edit 3.0, Windows Millennium Edition, Windows 2000


Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32303041
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 DarkCat

извини дорогой, но у меня работает внезависимости от способа редактирования ...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32303045
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё один аргумент против RichEdit здесь там внизу есть такой пунктик Rich Edit Shortcut Keys - всё ли оно надо?

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32303081
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123456789098
Пусь работает, я не возражаю

...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32306475
для такой вещи как раскраска RichEdit лучше использовать TOM (Text Object Model).

например, вот так можно покрасить каждый второй символ в красный цвет:

------------------------
IUnknownPtr pUnk;
::SendMessage(hRichEditWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk))

ITextDocumentPtr textDoc = pUnk;

textDoc->Freeze();

GETTEXTLENGTHEX tl = { GTL_NUMCHARS, 1200};
int iLen = ::SendMessage(hRichEditWnd, EM_GETTEXTLENGTHEX, (WPARAM)&tl, 0);

ITextRangePtr pRange = textDoc->Range(0, iLen);

for(int i = 0; i < iLen; i+=2)
{
pRange->SetRange(i, i+1);

ITextFontPtr pFont = pRange->Font;

pFont->BackColor = RGB(255, 127, 127);
}

textDoc->Unfreeze();
--------------------------
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32306632
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Андрей Шевченко
И как там с мерцанием? в RichEdit2.0 действует?

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32306668
Sfagnum писал:
И как там с мерцанием? в RichEdit2.0 действует?


Не - не мерцает (по крайней мере на моем компупере)
Я тоже сначала с селекшеном работал, но это ведь никуда не годится - курсор бегает, моргает. А вот ITextDocument c Freeze/Unfreeze и ITextRange - это то что надо :)

По поводу RichEdit2.0 - должно работать (но я не проверял :)
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32307587
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за подсказку буду капать...
>По поводу RichEdit2.0 - должно работать (но я не проверял :)
на MSDN'е написано вроде должно... + даёт возможность управлять Undo/Redo

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32308338
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Андрей Шевченко
обнаружил что нет у меня файлика tom.h не поделитесь?
мыло в профиле

заранее спасибо

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
TRichEdit + подсветка синтаксиса
    #32308645
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо отозвавшемуся

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / TRichEdit + подсветка синтаксиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]