Вниз
Скачать: CL | DM;

Выделение слов в TRxRichEdit.   Найти похожие ветки 

 
Lexer ©   (2003-07-15 19:19) [0]

В RxRichEdit загружаю SQL-Script, нужно в нём выделять жирным шрифтом служебные слова: CREATE, SELECT и т.д. Но это должно происходить быстро(незаметно для пользователя как в Delphi).
Пробовал делать так:
SearchPos := mText.FindText(CodeWord.Strings[i], StartSearchPos,
Length(mText.Text), [stWholeWord, stMatchCase, stSetSelection]);
if SearchPos <> -1 then
begin
CurrText.Style := CurrText.Style + [fsBold];
StartSearchPos := SearchPos + Length(CodeWord.Strings[i]);
end;
но в цикле это работает очень долго, нужно более оптимальное решение.


 
Lexer ©   (2003-07-15 21:31) [1]

Так никто и не ответил, обидно :-(
Если вдруг у кого-то появятся мысли по этому вопросу большая просьба: пишите на atsigankov@citcompany.ru, или на этот же вопрос в форуме RSDN - там у меня подписка на этот вопрос.
В RSDN ник - Читатель.


 
Ученик ©   (2003-07-15 22:49) [2]

Возможно здесь, что-то лишнее :-)

uses
tom_TLB; // в кладовке (Text Object Model)

FTextRange: ITextRange;
FTextDocument: ITextDocument;
public
{ Public declarations }
procedure SelectSQLWords;
end;

procedure TForm1.SelectSQLWords;
begin
if FTextRange <> nil then begin
FTextDocument.Freeze;
try
FTextRange.Start := 0;
FTextRange.End_ := 0;
if FTextRange.Expand(tomWord) > 0 then repeat
if IsSQLWord(Trim(FTextRange.Text)) then
FTextRange.Font.Bold := Integer(tomTRUE)
else
FTextRange.Font.Bold := tomFALSE;
FTextRange.MoveStart(tomWord, 1);
until FTextRange.Expand(tomWord) = 0;
finally
FTextDocument.UnFreeze
end;
RichEdit1.SelStart := RichEdit1.SelStart
end
end;

procedure TForm1.FormShow(Sender: TObject);
var
IOleInterface: IUnknown;
begin
SendMessage(RichEdit1.Handle, EM_GETOLEINTERFACE, 0, Integer(@IOleInterface));
if IOleInterface.QueryInterface(IID_ITextDocument, FTextDocument) = 0 then begin
FTextRange := FTextDocument.Range(0, 0);
SelectSQLWords
end
end;

{$J+}
procedure TForm1.RichEdit1Change(Sender: TObject);
const
bWorking: Boolean = False;
begin
if not bWorking then begin
bWorking := True;
try
SelectSQLWords
finally
bWorking := False
end
end
end;




Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.014 c
14-100978
Макс
2003-07-14 06:53
2003.07.31
KeySpy


8-100838
RBear
2003-04-08 15:53
2003.07.31
Проблема с картинко в OpenGL


11-100654
Ruf
2002-11-27 18:56
2003.07.31
Kylix & KOL


4-101026
dimonf
2003-05-28 11:02
2003.07.31
Подскажите какая функция в API отвечает за вывод PopupMenu???


14-100981
Soft
2003-07-10 11:23
2003.07.31
Пишушие CD-ROM




   Наверх