Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RichEdit


Автор: WIN32API 2.9.2005, 11:13
Ребятки, использую JvRichEdit. Отличие от стандартного минимальные, но есть. Так вот назре вопрос, как можно имзенить шрифт (сделать его жирным, например) одного слова или слов. А все остальное при этом должно остатся как есть? Пожалуйста, ответьте кодом. smile

Автор: mvdr 2.9.2005, 13:45
Чисто теоретическое наюблюдение: нужное слово записать в Edit, у которого стоит нужный аттрибут текста. А потом RichEdit1.Lines[1]:=Edit1.Text;

Автор: z-END 2.9.2005, 13:50
Femida че за бред? smile
дельфей под рукой нет, но на пальцах обясню:
устанавливаем SelStart в начало нужного слова и SelEnd в его конец, далее выставляем аттрибуты для Selected и все

Автор: WIN32API 2.9.2005, 15:13
Я делаю так:

Код

procedure TextToBold(Txt: String);
var
 SearchLen: integer;
 startpos, Pos, endpos: integer;
begin
 with Form1 do begin
  startpos := 0;
  endpos := Length(RichEdit1.Text);
  RichEdit1.Lines.BeginUpdate;
   while RichEdit1.FindText(Txt, startpos, endpos, [stMatchCase]) <> -1 do
    begin
      endpos   := Length(RichEdit1.Text) - startpos;
      Pos := RichEdit1.FindText(Txt, startpos, endpos, [stMatchCase]);
      Inc(startpos, Length(Txt));
      SetFocus;
      RichEdit1.SelStart  := Pos;
      RichEdit1.SelLength := Length(Txt);
     RichEdit1.SelAttributes.Style := [fsBold];
    end;
 end;
end;


Но скорость оставляет желать лучшего... Может, знаете, как сделать это быстрее. Например, у меня был такой вариант:

Код
procedure TextToBold(Txt: String);
begin
 with Form1 do begin
  RichEdit1.SelStart := RichEdit1.FindText(Txt, 0, Length(RichEdit1.Text), [stWholeWord]);
  RichEdit1.SelLength := Length(Txt);
  RichEdit1.SelAttributes.Style := [fsBold];
 end;
end;


Но естественно он останавливался на первом найденном слове. Помогите!

Автор: _hunter 2.9.2005, 15:42
ну ищи в следующий раз с позиции, начинающейся за найденным текстом ( второй параметр )

Автор: WIN32API 4.9.2005, 11:02
( второй параметр ) ? где этот параметр?

Автор: _hunter 5.9.2005, 11:32
FindText(первый параметр, второй параметр, третий параметр, ...

Автор: Archon7th 6.9.2005, 10:58
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  s,t : string;
  i,l,m : integer;
begin
  s:='begin';
  l:=Length(s);
  t:=form1.richedit1.Text;
  m:=Length(t)-l;
  form1.RichEdit1.Lines.BeginUpdate;
  for i:=1 to m do begin
    if t[i]=s[1] then
      if s=copy(t,i,l) then begin
        application.ProcessMessages;
        with form1.RichEdit1 do begin
          SelStart:=i-1;
          SelLength:=l;
          SelAttributes.Color:=clRed;
        end;
      end;
  end;
  form1.RichEdit1.Lines.EndUpdate;
end;


делает слово begin красным, при размере файла 65кб примерно за 0,5 сек

если убрать
Код
application.ProcessMessages;
еще быстрее

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)