Главная страница
    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.008 c
8-100841
Intell
2003-04-04 06:30
2003.07.31
Как узнать разрешение видео?


14-100904
Volcano_XXX
2003-07-14 11:44
2003.07.31
TCP - Заголоваок


3-100568
62mkv
2003-07-08 13:12
2003.07.31
BDE 5.2


11-100652
Arhangel
2002-11-30 15:02
2003.07.31
Не


3-100611
DBDev
2003-07-09 15:11
2003.07.31
Проблема с TDBImage! Подскажите ПЛИЗ!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский