Форум: "KOL";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизКак выделить цветом какое-либо свово в RichEdit е? Найти похожие ветки
← →
=Sniper= (2004-08-11 22:40) [0]Не надо меня посылать изучать пример где рисуется 10 строк закрашенных!
Так как мне нужно закрасить это слово где бы оно ни находилось (в RichEdit"e)!
← →
=Sniper= (2004-08-12 21:33) [1]Удалено модератором
Примечание: Создание пустых сообщений
← →
=Sniper= (2004-08-13 14:49) [2]Удалено модератором
Примечание: Создание пустых сообщений
← →
nOvell (2004-08-13 19:49) [3]Можно плясать от этого:
Принцип, вкратце, взять текст из RichEdita в формате RTF и навставлять управляющих символов. Что то типа примера внизу - выделит все вхождения "" курсивом.
procedure TForm1.Button1Click(Sender: PObj);
var s: string; i : integer;
begin
s := RichEdit1.RE_Text[reRTF,false];
i := pos("",s);
while i <> 0 do
begin
s := Copy(s,1,i-1)+"\i1\i0"+CopyEnd(s,i+3);
i := posex("",s,i+9);
end;
RichEdit1.Clear;
RichEdit1.RE_InsertRTF(s);
end;
P.S. Таким способом можно легко получить выдиление курсивом, bold"ом, подчеркивание, и изменить размер шрифта. Но если тебе нужно поменять цвет или шрифт - сразу удавись. У меня есть юнит Html2RTf - его пять человек c VB переписывало :) там есть такая фича.(правдо он дохрена чего не умеет, но основные тэги + цвет + шрифты, он держит) - мне этого хватило. +Я еще туда поддержку иероглифов засандалил :).
Если кто знает иной, кроме форматирования на уровне кода RTF, способ - мне тоже будет интересно узнать.
← →
z007 (2004-08-14 00:23) [4]1. Все правильно.
2. Если RTF то на уровне кода.
3. Если не на уровне кода, то это уже не KOL...
4. Или не RTF...
1. Шутка.
2. Вообще, синтаксическая подсветка - это не стандарт для RTF, так что, нао обрабатывать весь текст, чтобы ее получить (на уровне компонента SintaxRTF это, правда, можно автоматизировать).
3. Другие варианты есть. Их примерно столко же, сколько способов перемещения файлов в Explorer"е. Но, боюсь, самый кодоэкономичный - все-таки на уровне кода.
4. Ну, и конечно, подсветку можно сделать по принципам sintaxEdit (см.код.)
← →
=Sniper= (2004-08-14 00:49) [5]Нет мне нужно подсветить обычный текстовый файл например исходник на СИ:
т.е подсветить слова void, int, #include которые читаются в RichEdit
← →
Мастер © (2004-08-14 13:42) [6]Хоть и не в КОЛ, но может помочь:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ToolWin, ComCtrls, StdCtrls;
type
TDelim= Set of char;
TForm1 = class(TForm)
re: TRichEdit;
od: TOpenDialog;
ToolBar1: TToolBar;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure reChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Delims: TDelim=[" ","[","]","(",")",":",";",".",#13,#10,#09,"="];
StartPos: Integer;
implementation
{$R *.dfm}
procedure SetBold(re: TRichEdit;const aPos,aLen: Integer);
begin
re.SelStart := aPos;
re.SelLength := aLen;
re.SelAttributes.Color := clNavy;
re.SelAttributes.Style := [fsBold];
re.SelLength := 0;
end;
function isTags(const aSrc: String;aPos,MaxLen: Integer ): Integer;
const aTagsWord: array[0..25] of String=(
"TYPE","CONST","FUNCTION","STRING","WHILE",
"VAR","INTEGER","PROCEDURE","BEGIN","END",
"CLASS","INITIALIZATION","FINALIZATION","UNIT","IMPLEMENTATION",
"STRING","TRY","FINALLY","EXCEPT","FOR",
"IF","THEN","ELSE","PROGRAM","USES",
"CASE"
);
var
i: Integer;
s: String;
LenTag: Integer;
LenASrc: Integer;
begin
Result := 0;
LenASrc := Length(aSrc);
for i := 0 to High(aTagsWord) do
begin
LenTag := Length(aTagsWord[i]);
s :=UpperCase(Copy(aSrc,aPos,LenTag));
if s=aTagsWord[i] then
begin
if LenASrc>=aPos+LenTag then
begin
if aSrc[aPos+LenTag] in Delims then
begin
if aPos>1 then
begin
if aSrc[aPos-1] in Delims then
begin
Result := LenTag;
Exit;
end
else continue;
end
else
begin
Result := LenTag;
Exit;
end;
end;
end;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i: Integer;
Len,LenStr: Integer;
s: String;
begin
if od.Execute then re.Lines.LoadFromFile(od.FileName);
i := 1;
s := re.Lines.Text;
LenStr := Length(s);
while i<=LenStr do
begin
if (s[i] = #13) or (s[i] = #10) then
begin
Inc(i);
continue;
end;
Len := isTags(s,i,50);
if Len<>0 then
begin
SetBold(re,i-1,Len);
Inc(i,Len);
end
else Inc(i);
end;
end;
procedure TForm1.reChange(Sender: TObject);
var
Pos1: Integer;
re: TRichEdit;
begin
re := (Sender as TRichEdit);
StartPos := re.SelStart;
end;
end.
← →
=Sniper= (2004-08-14 15:39) [7]2 Мастер: Спасибо! Попытаюсь извлеч пользу! ;-)
← →
=Sniper= (2004-08-15 01:40) [8]Вот почему-то в KOL не правильно работает, а в VCL абсолютно правильно!!
Это уже второй способ подсветки который работает неправильно и ИМЕННО В КОЛ!
← →
nOvell (2004-08-15 08:43) [9]Все таки придется тебе доки по формату RTF читать :j
← →
=Sniper= (2004-08-16 12:13) [10]Не ну почему не работает в KOL, А РАБОТАЕТ В VCL!!!!!
← →
TRUF (2004-08-16 16:05) [11]А ты не равняй KOL с VCL.
← →
=Sniper= (2004-08-16 16:31) [12]Да я и не ровняю! Я просто хочу разобраться почему не работает в KOL!!!!
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c