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


Автор: Ak47black 14.9.2007, 14:44
Здравствуйте.
Помоги понять как тут сделать.
Юзаю обычный TMemo. 
И чтобы после добавления курсор находил не на новой строке делаю так 
Код

  TMemo.Text:= TMemo.Text+#13+#10+SomeString

При частом вызове работает этот код очень медленно (понятно почему).
Подскажите пожалуйста как оптимизировать, с учетом того что при добавлении компонент будет прокручиваться?  smile 

Автор: ALeXandrK 14.9.2007, 15:31
Воспользоваться свойством, кот. показывает кол-во сисмволов = номеру последнего символа.
Сохранить это значение, затем сделать:
Код

 Memo.Lines.Append(SomeString);


Затем вернуть курсор на сохраненную позицию.

Цитата

Подскажите пожалуйста как оптимизировать, с учетом того что при добавлении компонент будет прокручиваться?  


Чтобы не прокручивалось, нужно покапаться в исходниках и перегрузить соответствующий метод.

Автор: Ak47black 14.9.2007, 15:42
ALeXandrK, не получается у меня с этим Append - результат тотже.
Цитата

Чтобы не прокручивалось, нужно покапаться в исходниках и перегрузить соответствующий метод.

Не мне нужно чтобы при добавлении была прокрутка (тоесть автоматически прокручивалось).

Автор: ALeXandrK 14.9.2007, 16:08
Так в чем проблема???!!!

Просто пишешь:
Код

Memo.Lines.Append(SomeString);


Прокрутка происходит автоматически.

Автор: Ak47black 14.9.2007, 16:25
Цитата

Так в чем проблема???!!!

В том что при Append как и при Add курсор устанавливается на новую пустую строку. А мне нужно чтобы он оставался после добавленного текста.

Автор: ALeXandrK 14.9.2007, 16:30
Так я ж тебе написал сохраняй местоположение курсора перед добавлением, а после добавления, ставь его обратно.

Вот пример:
Код

...
var Pos: Integer;
begin
  Pos := mmo1.SelStart;
  mmo1.Lines.Append(SomeString);
  mmo1.SelStart := Pos;
end;


Если после добавления Мемо теряет фокус, то не забудь добавить:
Код

mmo1.SetFocus;

Автор: Ak47black 14.9.2007, 16:38
ALeXandrK, Но новая строка-же всеровно появляется, а мне нужно сделать чтобы её небыло.

Добавлено @ 16:38
Твой код тока курсор передвигает.

Автор: ALeXandrK 14.9.2007, 16:49
Так тебе нужно, чтобы текст добавлялся к последней строке? Или вставлялся туда, где сейчас курсор?

Может тебе это подойдет:
Код

mmo1.SelText := SomeString;

Автор: Ak47black 14.9.2007, 16:50
Код

TMemo.Text:= TMemo.Text+#13+#10+SomeString

Тоесть переход перед добавлением, а не после.

Автор: ALeXandrK 14.9.2007, 16:52
Может это подойдет:
Код

mmo1.SelText := #13#10+SomeString;

Автор: Ak47black 14.9.2007, 17:00
Я так решил эту задачу.
Код

  TMemo.Lines.Add('');
  TMemo.Lines.Strings[TMemo.Lines.Count]:= Cmd;


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