Перейти к содержимому


- - - - -

richedit и выделение символов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 fakir9999

fakir9999
  • Новичок

  • Новичок
  • 4 сообщений

Отправлено 15.06.2009 - 14:40

как сделать чтобы в слове окрашивались последние 3 символа, у меня пока получается пока только так

procedure TForm1.Button1Click(Sender: TObject);
var a :integer;text:string;i:integer;
begin
for i:=0 to memo1.lines.count-1   do begin
text:=memo1.lines[i];
a:=0;
if length(text)>11  then
while a<=length(richedit1.Text) do
begin
richedit1.selstart:=richedit1.FindText(text,a,Length(RichEdit1.Text)-a,[stWholeWord]);
richedit1.SelStart:=(length(text)-3);
richedit1.SelLength:=length(text);
a:=richedit1.selstart+(length(text)+3);
richedit1.SelAttributes.Color:=clyellow;
application.processmessages;
end;
end;
end;

во так все работает

Сообщение отредактировал fakir9999: 15.06.2009 - 17:14


#2 Vipous

Vipous
  • Великий и Могучий

  • Power User
  • 1 899 сообщений
  • Пол:Мужчина
  • Город:Солнцево

Отправлено 15.06.2009 - 15:14

точно также, при выделении слова сдвинь точку старта на длину слова минус 3, длина выделения 3 символа

#3 fakir9999

fakir9999
  • Новичок

  • Новичок
  • 4 сообщений

Отправлено 15.06.2009 - 16:31

спасибо за помощь

Сообщение отредактировал fakir9999: 15.06.2009 - 17:14


#4 Vipous

Vipous
  • Великий и Могучий

  • Power User
  • 1 899 сообщений
  • Пол:Мужчина
  • Город:Солнцево

Отправлено 15.06.2009 - 17:01

как вариант
richedit1.selstart:=richedit1.FindText(text,a,Length(RichEdit1.Text)-a,[stWholeWord]) + (length(text)-3);
richedit1.SelLength:=3;
a:=richedit1.selstart+3;


#5 fakir9999

fakir9999
  • Новичок

  • Новичок
  • 4 сообщений

Отправлено 15.06.2009 - 17:57

наткнулся на одну проблему в коде когда пытался интегрировать часть твоего кода мой вариант который в первой посте может работать с одним слово как я понял ,я поробовал эксперементировать на небольшом тексте и понял что работает не так как надо,
procedure TForm2.Button6Click(Sender: TObject);
var a :integer;text:string;i:integer;
begin
for i:=0 to form3.memo4.lines.count-1   do begin
text:=form3.memo4.lines[i];
a:=0;
while a<=length(richedit1.Text) do
begin
richedit1.selstart:=richedit1.FindText(text,a,Length(RichEdit1.Text)-a, [stWholeWord]);
richedit1.SelLength:=3;
a:=richedit1.selstart+3;
richedit1.SelAttributes.Color:=clyellow;
application.processmessages;
end;
end;
end;
он у мя окрашивает первые 3, когда попытался вставить твой код полностью без всяких изменений он как бы работает, окрашивает последние 3 символа, но текст начинает мигает и прога скажем так виснет.

Сообщение отредактировал fakir9999: 15.06.2009 - 17:57


#6 Vipous

Vipous
  • Великий и Могучий

  • Power User
  • 1 899 сообщений
  • Пол:Мужчина
  • Город:Солнцево

Отправлено 15.06.2009 - 19:20

Опиши, что вообще должно происходить.

#7 fakir9999

fakir9999
  • Новичок

  • Новичок
  • 4 сообщений

Отправлено 15.06.2009 - 19:46

вот к примеру у мя текст в нем есть слова больше 12 символов, в них последние 3  символа должны окрашиватся в желтый, я  сделал по своему через сравнеие чтоб он видел слова больше или равные 12 символам но как окрасить последние 3 символа мало получается




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей