Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Подсветка слов в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.057 c
4-1133333765
BVV
2005-11-30 09:56
2006.02.12
Обращения к реестру и к файлам


15-1138012216
Ricks
2006-01-23 13:30
2006.02.12
Breakpoint


1-1136974706
Barsky
2006-01-11 13:18
2006.02.12
Скрол (мышыный) в гриде


15-1137696182
yuril
2006-01-19 21:43
2006.02.12
Требуется программист


4-1133358539
remlin
2005-11-30 16:48
2006.02.12
считывание данных с эл.тахеометра