Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

Выделение слов в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
4-101038
SH
2003-05-29 14:10
2003.07.31
Как вызвать из своей программы 16-битное приложение с пар-ми?


3-100562
Kati
2003-07-08 12:03
2003.07.31
Индексация таблиц.


14-100888
Yuraz
2003-07-16 13:58
2003.07.31
Как узнать, есть ли пересечение фигур? Известны координаты.


1-100700
GSergei
2003-07-18 14:06
2003.07.31
Дерево каталогов


3-100629
paxer
2003-07-10 11:21
2003.07.31
Нужнай дока по Interbase (желат.на русском)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский