Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: 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 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-100613
Falendysh
2003-07-09 18:03
2003.07.31
печать содержимого в DBGrid


14-100884
mikhasenko.anton
2003-07-16 08:25
2003.07.31
Где найти компонент DBF?


14-100916
Viktor Kushnir
2003-07-13 09:18
2003.07.31
XML


3-100569
ruslan_as
2003-07-08 10:41
2003.07.31
Как убрать лишние пробелы в поле InteBase


6-100870
Леопольд (К)
2003-05-24 10:37
2003.07.31
Всётаки фрейм