Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 11:44   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

не совсем понятно по каким признакам вы хотите отделять слова или словосочетания, то бишь разбор лексем... но, допустим есть слова с пробелами меж ними, тогда решение в лоб (да, некрасиво... но под свои требования сами резберетесь):
Код:
function getc(i: integer):tcolor;
begin
 case i of // подставите свои
  0: result:= clblack;
  1: result:= clsilver;
  2: result:= clred;
  3: result:= clolive;
  4: result:= clyellow;
  5: result:= clgreen;
  6: result:= clblue;
  7: result:= clpurple;
  8: result:= clgray
 end
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var ipos, i, count: Integer;
begin
 count:=0;

 for i:= 1 to length(Richedit1.text) do begin
  if Richedit1.text[i]= ' ' then begin

   Richedit1.SelStart := ipos;
   Richedit1.SelLength:= i-1;
   Richedit1.SelAttributes.color:= getc(count);
   ipos:= i-1;
   inc(count); if count>8 then count:= 0;
  end;
 end;
 Richedit1.SelStart := ipos;
 Richedit1.SelLength:= length(Richedit1.text)- ipos;
 Richedit1.SelAttributes.color:= getc(count);
end;
если-же, конкретные фонемы, то тогда используйте posex, как уже было указано выше.
Изображения
Тип файла: jpg 1.jpg (12.7 Кб, 80 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.12.2009, 12:27   #12
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Хм, у меня нету функции posex
Поправил код:
Код:
var ipos, i, count: Integer;
begin
for i:= 0 to Richedit1.Lines.count do begin
if pos('^1',Richedit1.Lines[i])<>0  then begin
Richedit1.SelStart := ipos;
Richedit1.SelLength:= i-2;
Richedit1.SelAttributes.color:=clred;
end;
end;
for i:= 0 to Richedit1.Lines.count do begin
if pos('^2',Richedit1.Lines[i])<>0  then begin
Richedit1.SelStart := ipos;
Richedit1.SelLength:= i-2;
Richedit1.SelAttributes.color:=clblue;
end;
end;
Richedit1.SelStart := length(Richedit1.text);
end;
Ввожу ^1Привет^2Ыы^1ггг
Привет красным, ыы синим, а гг тоже синим! В чем проблема?

13:26

Набредокодил:
Код:
var ipos, i, count: Integer;
begin
posix:=0;
for i:= 0 to Richedit1.Lines.count do begin
if pos('^1',Richedit1.Lines[i])<>0  then begin
if posix=0 then posix:=pos('^1',Richedit1.Lines[i]);
Richedit1.SelStart := posix;
Richedit1.SelLength :=length(richedit1.Lines[I]);
Richedit1.SelAttributes.color:=clred;
end;
if posex('^1',richedit1.Lines[I],posix+2)<>0 then begin
posix:=posex('^1',richedit1.Lines[I],posix+2);
Richedit1.SelStart := posix;
Richedit1.SelLength :=length(richedit1.Lines[I]);
Richedit1.SelAttributes.color:=clred;
end;
end;
posix:=0;
for i:= 0 to Richedit1.Lines.count do begin
if pos('^2',Richedit1.Lines[i])<>0  then begin
if posix=0 then posix:=pos('^2',Richedit1.Lines[i]);
Richedit1.SelStart := posix;
Richedit1.SelLength:= length(richedit1.Lines[I]);
Richedit1.SelAttributes.color:=clblue;
end;
end;
Richedit1.SelStart := length(Richedit1.text);
end;
^11111^22222^1111111
Почему ^11111-красным,^22222 синим,^1111111-синим???

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Модератор

Последний раз редактировалось mihali4; 13.12.2009 в 17:43.
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 15:04   #13
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Попробуйте так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;   i,n,k:integer;
procedure nextn;
begin
if s[i]='^' then
begin
k:=strtoint(s[i+1]);

RichEdit1.SelStart:=n;
RichEdit1.SelLength:=i-n-1;
case k of
1:RichEdit1.SelAttributes.Color:=clMaroon;
2:RichEdit1.SelAttributes.Color:=clGreen;
3:RichEdit1.SelAttributes.Color:=clOlive;
4:RichEdit1.SelAttributes.Color:=clNavy;
5:RichEdit1.SelAttributes.Color:=clPurple;
6:RichEdit1.SelAttributes.Color:=clTeal;
7:RichEdit1.SelAttributes.Color:=clGray;
8:RichEdit1.SelAttributes.Color:=clSilver;
9:RichEdit1.SelAttributes.Color:=clRed;
end;

RichEdit1.SelStart:=i;
RichEdit1.SelAttributes.Color:=clblack;
inc(i);
n:=i-1;
end else
if s[i]<>'' then
begin
inc(i);
nextn;
end;
end;

begin
i:=1;
n:=0;
s:=Richedit1.Text;
repeat
nextn;
until s[i]='';
end;
У нас принято оформлять код специальным тэгом - кнопочка "#", не цитатой.
Модератор
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось mihali4; 13.12.2009 в 16:18.
Volt вне форума Ответить с цитированием
Старый 13.12.2009, 15:36   #14
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Спасибо, щас попробую что-то сделать..

Последний раз редактировалось KoBRaAndrey; 13.12.2009 в 15:58.
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 16:25   #15
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

выделяет после
Код:
procedure TForm1.Button2Click(Sender: TObject);
var s:string; i,n,k:integer;
procedure nextn;
begin
if s[i]='^' then
begin
k:=strtoint(s[i+1]);
inc(i,2);
nextn;
end else
if s[i]<>'' then
begin

RichEdit1.SelStart:=i-1;
RichEdit1.SelLength:=1;
case k of
1:RichEdit1.SelAttributes.Color:=clMaroon;
2:RichEdit1.SelAttributes.Color:=clGreen;
3:RichEdit1.SelAttributes.Color:=clOlive;
4:RichEdit1.SelAttributes.Color:=clNavy;
5:RichEdit1.SelAttributes.Color:=clPurple;
6:RichEdit1.SelAttributes.Color:=clTeal;
7:RichEdit1.SelAttributes.Color:=clGray;
8:RichEdit1.SelAttributes.Color:=clSilver;
9:RichEdit1.SelAttributes.Color:=clRed;
end;


inc(i);
nextn;
end;
end;

begin
i:=1;
n:=0;
s:=Richedit1.Text;
repeat
nextn;
until s[i]='';
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось mihali4; 13.12.2009 в 16:33.
Volt вне форума Ответить с цитированием
Старый 13.12.2009, 16:43   #16
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Если етот код поставить в событие ричедит чанге, то появляются ошибки
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 17:13   #17
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Да вы что совсем не хотите думать? благо вам, что мне делать нечего. Вот должно работать:
Код:
procedure TForm1.RichEdit1Change(Sender: TObject);
var s:string; i,n,k, j:integer;
procedure nextn;
begin
j:=RichEdit1.SelStart;
if (s[i]='^') and (s[i+1] in ['0'..'9']) then
begin
k:=strtoint(s[i+1]);
inc(i,2);
nextn;
end else
if s[i]<>'' then
begin

RichEdit1.SelStart:=i-1;
RichEdit1.SelLength:=1;
case k of
1:RichEdit1.SelAttributes.Color:=clMaroon;
2:RichEdit1.SelAttributes.Color:=clGreen;
3:RichEdit1.SelAttributes.Color:=clOlive;
4:RichEdit1.SelAttributes.Color:=clNavy;
5:RichEdit1.SelAttributes.Color:=clPurple;
6:RichEdit1.SelAttributes.Color:=clTeal;
7:RichEdit1.SelAttributes.Color:=clGray;
8:RichEdit1.SelAttributes.Color:=clSilver;
9:RichEdit1.SelAttributes.Color:=clRed;
end;
RichEdit1.SelStart:=j;

inc(i);
nextn;
end;
end;
begin
i:=1;
n:=0;
s:=Richedit1.Text;
repeat
nextn;
until s[i]='';
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 13.12.2009, 17:52   #18
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Спасибо огромное! Я бы вам поставил 3 +(за каждый код), но увы не могу. Так что +1 + Я просто в репиат и унтил не разбираюсь и запутался
KoBRaAndrey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цветной текст в RichEdit - проблемы. Fezilk Общие вопросы Delphi 2 27.08.2009 12:06
RichView(Edit) - цветной текст - реально? Fezilk Общие вопросы Delphi 6 24.08.2009 09:27
Как вставить в TListBox цветной текст? VintProg Общие вопросы Delphi 2 03.08.2009 11:46
Цветной текст ERASERROR Общие вопросы Delphi 4 25.01.2008 21:04
текст в richedit по ширине *Devil* Компоненты Delphi 1 15.06.2007 16:27