Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
ВнизПодсветка слов в TRichView Найти похожие ветки
← →
Garfunkel (2006-01-13 12:54) [0]Нужно подсветить в тексте все найденный аккордовые символы. Для тех, кто не знает - аккорды могут состоять из заглавных английских букв C,D,E,F,G,A,B,H а также иметь после себя символы - m,m7,7,dim7,#,b,sus4,dim,sus7,6/9 и др. Например -
C6/9, D#7-5, Am7, Gb7+5 и др.
Вопрос как быстро найти и подсветить синим цветом все найденные аккорды? Есть ли какое решение?
Заранее благодарю
← →
Johnmen © (2006-01-13 13:16) [1]Что за компонент? Кто его родитель?
← →
asafr © (2006-01-13 13:16) [2]Решение есть.. Не буду разжевывать и вдаваяться в подробности - просто выложу процедуру и функцию для реализации подсветки слов (работает в моей программе, но подсвечивет зарезервированые слова SQL жирным текстом)... Переработав процедуру под свои задачи - можешь получить желаемый результат...
var
TheList :array of string; //Список подсвечиваемых слов (у меня формирутся динамически в др. месте)
....
....
procedure Tfm_Main.HighLight(RichE:TRichEdit);
var WStart, WEnd, WEnd2: integer;
WorkSpace, SWord: string;
begin
WStart := 1;
WEnd := 1;
with RichE do
begin
WorkSpace := Text + " " + #$D#$A;
while WEnd > 0 do
begin
WEnd := SearchFor(WorkSpace, " ", WStart);
WEnd2 := SearchFor(WorkSpace, #$A, WStart);
if WEnd2 < WEnd then WEnd := WEnd2;
SWord := copy(WorkSpace, WStart, WEnd - 1);
if (SWord <> " ") and (SWord <> "") then
if CheckList(SWord) then
begin
SelStart := WStart - 1;
SelLength := length(SWord);
SelAttributes.Style := [fsBOLD];
SelStart := WStart + length(SWord) + 1;
SelAttributes.Style := [];
end;
WStart := WStart + WEnd;
end;
SelStart := length(Text)+1;
end;
end;
function Tfm_Main.CheckList(InString: string): boolean;
var X: integer;
begin
Result := false;
X := 1;
InString := StringReplace(InString, " ", "",[rfReplaceAll]);
InString := StringReplace(InString, #$A, "",[rfReplaceAll]);
InString := StringReplace(InString, #$D, "",[rfReplaceAll]);
while X < High(TheList) + 1 do
if TheList[X] = lowercase(InString) then
begin
Result := true;
X := High(TheList) + 1;
end
else inc(X);
end;
Удачи!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c