Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сохранить цветовое выделение текста в TRichEdit? [D7, WinXP]


Alex_C ©   (2006-09-25 13:41:00) 

Есть TRichEdit в котором цветом автоматически выделяются ключевые слова. При добавлении нового текста в конец иимеющегося
RichEd.Text := RichEd.Text+IputChar;
цветовое выделение теряется и приходится снова весь текст просматривать и выделять ключевые слова. Как можно этого избежать?
Есть такой вариант, при котором не теряется цветовое выделение текста:
RichEd.SelStart := Length(RichEd.Text);
RichEd.SelLength := 0;
RichEd.SelText := InputChar;
но он не подходит ввиду того, что не позволяет в это время пользователю самому выделять текст.


clickmaker   (2006-09-25 17:14:00) [1]

RichEd.Text := RichEd.Text+IputChar;
этой строчкой ты фактически полностью меняешь содержимое, причем, именно текст, а форматирование естесственно теряется.
Как вариант можно попробовать
S := RichEdit1.Lines[RichEdit1.Lines.Count-1];
S := S + 'Some text';
RichEdit1.Lines[RichEdit1.Lines.Count-1] := S;

тогда, по крайне мере, только у последней строки собьется формат


Alex_C   (2006-09-25 17:06:00) [2]

свой компонент?
не понятно зачем так сделано, чтоб при добавлении текста все аттрибубы что были менять на исходные.


clickmaker   (2006-09-25 16:47:00) [3]


> [10] Alex_C ©   (25.09.06 16:45)

другие программы могут и не использовать richedit


Alex_C   (2006-09-25 16:45:00) [4]

Видел как работают другие программы. В них все очень быстро и подсветка синтаксиса, и позволяют добавлять текст, сохраняя аттрибуты старого текста. Вроде простая задама, а вот в инете порылся - решения простого для нее нет.


clickmaker   (2006-09-25 15:37:00) [5]


> [8] Alex_C ©   (25.09.06 15:31)

с точки зрения программера в SelAttributes
ну а так, это часть формата RTF. В тэгах. В этом смысле ртф слегка напоминает html


Alex_C   (2006-09-25 15:31:00) [6]

А вот интересно, где у RichEdit хранится информация об аттрибутах каждой буквы? По идее ведь каждая буква может свой цвет, фонт и т.п. иметь? В св-ве Text хранится только сам текст, а где хранятся аттрибуты каждой буквы?


clickmaker   (2006-09-25 15:19:00) [7]

Ну звиняй, варианты кончились.
Разве что попробовать [3], но окружить вызовами
SendMessage(RE.Handle, WM_SETREDRAW, 0, 0);
...
SendMessage(RE.Handle, WM_SETREDRAW, 1, 0);
чтобы не мерцало


Alex_C   (2006-09-25 15:16:00) [8]

Нет
При этом добавляется НОВАЯ строка, а мне надо чтоб было продолжение существующей.


clickmaker   (2006-09-25 14:35:00) [9]

а RichEdit.Lines.Add не поможет?


Alex_C   (2006-09-25 14:29:00) [10]

Некрасиво получается. Вот представь - все время добавляется из ус-ва информация. Сохранять и восстанавливать SelStart - все время выделение мигает, пока пользователь выделяет текст.


clickmaker   (2006-09-25 14:27:00) [11]


> не получается выделить текст - SelStart то все время меняется

а сохранить, а потом восстановить?


Alex_C   (2006-09-25 14:17:00) [12]

Поясню ситуацию:
из устройства данные выводятся на RichEdit. Пользователь же в это время должен иметь возможность выделить допустим кусок текста и скопировать его. Данные с ус-ва поступают постоянно. Если пользоваться 2 методам, то у пользователя не получается выделить текст - SelStart то все время меняется.


clickmaker   (2006-09-25 14:01:00) [13]


> не позволяет в это время пользователю самому выделять текст

то есть? У тебя RichEd.SelText := InputChar; в отдельном потоке, да еще так долго, что пользователь может успеть что-то выделить?


Наверх

Титульная страница Поиск, карта сайта Написать письмо