Главная страница
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.03 c
2-1137950769
ReeD
2006-01-22 20:26
2006.02.12
как отобразить график ????


4-1133172043
kblc
2005-11-28 13:00
2006.02.12
Thread u Com


15-1138116629
Shastox
2006-01-24 18:30
2006.02.12
Вопрос про проблему с текстом.


3-1133952680
_Lucky_
2005-12-07 13:51
2006.02.12
Реализация системы доступа и АРМа Администратора доступа.


15-1137138036
TUser
2006-01-13 10:40
2006.02.12
Новый компьютер