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


Автор: Drizhenko 25.10.2005, 06:24
При добавлении новой строки в RichEdit курсор перескакивает на следующую, как сделать, чтобы он оставался на новой строке, в самом конце?
Пробовал таким образом
Код

procedure TForm1.Ping1EchoReply(Sender, Icmp: TObject; Error: Integer);
  begin
    if error = 0 then
      begin
        richEdit1.SelAttributes.Color:=clred;
        RichEdit1.Lines.Add('Не могу выполнить операцию Ping: '+Ping1.ErrorString );
        richEdit1.SelStart:=richEdit1.SelStart-1;
        pp:=pp+1;
        label5.Caption:='Потеряно: '+inttostr(pp);
        label6.Caption :=IntToStr(round((pp*100)/kp))+'%'+' потерь';
      end
  else
    richEdit1.SelAttributes.Color:=clblack;
    RichEdit1.Lines.Add('Получено '+ IntTostr(Ping1.Reply.DataSize)+
  ' байт от '+ping1.HostIP + ' за ' + intToStr(Ping1.Reply.RTT) + ' миллисекунд');
    richEdit1.SelStart:=richEdit1.SelStart-1;
  end;


Все работает, но почему-то цвет шрифта не становится красным, если же убираю
Код
richEdit1.SelStart:=richEdit1.SelStart-1;

во втором случае(в конце процедуры), то цвет меняется, а курсор не перескакивает.

Автор: Drizhenko 25.10.2005, 06:39
Даже если сделать так
Код
richEdit1.SelStart:=richEdit1.SelStart;

то цвет меняется.

Автор: Drizhenko 25.10.2005, 07:55
Помогите кто-нибудь!Пожалуйста!

Автор: FRAGNATIC 25.10.2005, 23:41
Код

var
  p: TPoint;
begin
  p.Y:=RichEdit1.CaretPos.Y;
  p.X:=Length(RichEdit1.Lines.Strings[p.Y]);
  RichEdit1.CaretPos:=p;
  RichEdit1.SetFocus;
end;

Автор: Drizhenko 26.10.2005, 05:58
Не помогает!

Автор: FRAGNATIC 26.10.2005, 14:29
Цитата
чтобы он оставался на новой строке, в самом конце

мой код именно это и делает
если немного вкуришь его то можешь сделать и чтобы на старой строке и ещё гденить он появлялся хоть в середине! =) и его роботоспособность я проверил в новом приложении всё пашет=)

Добавлено @ 14:34
слушай у меня прекрасно пашет код
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  richEdit1.SelAttributes.Color:=clred;
  RichEdit1.Lines.Add('Не могу выполнить операцию Ping: ');
  richEdit1.SelStart:=richEdit1.SelStart-1;
  RichEdit1.SetFocus;
end;


после вставки курсор находится после слов Ping: и всё ок! при этом эта строка красноя=)
и не надо ни чего мутить лишнего =)

Автор: Drizhenko 28.10.2005, 09:23
А ты пробовал второй раз на кнопку нажимать???? smile smile

Автор: Alexeis 28.10.2005, 09:43
Вот так работает

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  richEdit1.SelAttributes.Color:=clred;
  RichEdit1.Lines.Add('Íå ìîãó âûïîëíèòü îïåðàöèþ Ping: ');
  richEdit1.SelStart:=richEdit1.CaretPos.X  - 1;
  RichEdit1.SetFocus;
end;


Автор: Drizhenko 28.10.2005, 10:09
Рябята, спасибо вам, но у меня такое ощущение, что вы свой код даже не запускаете. Код alexeis1 работает, но курсор ПЕРЕСКАКИВАЕТ на следующую строку.

Автор: Romikgy 28.10.2005, 11:24
Код

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  RichEdit1.Lines.Add('Íå ìîãó âûïîëíèòü îïåðàöèþ Ping: ');
  RichEdit1.Refresh ;

  i:=length(RichEdit1.Lines[RichEdit1.Lines.count-1]);
  richEdit1.SelStart:=richEdit1.SelStart-i-2;
   richEdit1.SelLength:=i;
   richEdit1.SelAttributes.Color:=clred;
   richEdit1.SelStart:=richEdit1.SelStart+i;

  RichEdit1.SetFocus;

end;

А так?

Автор: Drizhenko 28.10.2005, 11:38
Спасибо, реально работающий код!! smile

Автор: Alexeis 28.10.2005, 11:52
если правильно понял то вот так
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  p : TPoint;
begin
  RichEdit1.SelStart := RichEdit1.Perform(EM_LINEINDEX, RichEdit1.Lines.Count, 0);
  richEdit1.SelAttributes.Color:=clred;
  p :=  richEdit1.CaretPos;
  richEdit1.SelStart := p.X - 1;
  RichEdit1.Lines.Add('Не могу выполнить операцию Ping: ');
  richEdit1.SelLength := Length('Не могу выполнить операцию Ping: ');

  RichEdit1.SelStart := RichEdit1.Perform(EM_LINEINDEX, p.Y, 0);
  Application.ProcessMessages;

  RichEdit1.SetFocus;
end;

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