Главная страница
    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
3-100569
ruslan_as
2003-07-08 10:41
2003.07.31
Как убрать лишние пробелы в поле InteBase


14-100879
avch
2003-07-16 10:13
2003.07.31
Доступ к библиотеке...


3-100553
Silver_
2003-07-07 12:44
2003.07.31
ADODataSetDeforeEdit ----> Имя текущего поля


14-100928
vidiv
2003-07-15 08:02
2003.07.31
Как сделать VirtualHost на сервере Apache


14-100966
sapsi
2003-07-15 08:20
2003.07.31
Пересечение границы Украины





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