![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить цветовое выделение текста в 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; в отдельном потоке, да еще так долго, что пользователь может успеть что-то выделить?