Консультация № 177779
09.04.2010, 21:44
42.08 руб.
0 10 3
Уважаемые эксперты, у меня к вам такой вопрос. В компонент МЕМО в цикле по одной букве выводится строка. Какое свойство компонента МЕМО использовать чтобы все эти буквы дописывались по мере вывода в одну строку, а не каждая новая буква на новой строке.
Я уже испробовал разные варианты, но никак не получилось. В инете искал, но тоже не нашел. У меня или каждый раз на новой строке пишет, или постоянно перезаписывает строку, вместо добавления новых символов.

Помогите пожалуйста.

Обсуждение

давно
Профессионал
153662
1070
09.04.2010, 21:56
общий
Камынин Владислав Дмитриевич:
Можно попробовать сделать так: берём переменную типа string и в неё добавляем по одной букве s:= s + 'Ваша буква', а затем просто выводим эту строку в memo memo.lines.insert(0, s). Конечно перед этим не забыв удалить старую строку memo.Lines.Delete(0).
А можно ещё и так:
memo1.Lines.Strings[0]:= memo1.Lines.Strings[0] + 's';
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
09.04.2010, 21:58
общий
Точно, как я сразу не додумался. СПАСИБО!!!
давно
Профессионал
153662
1070
09.04.2010, 22:03
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.
Можно попробовать сделать так: берём переменную типа string и в неё добавляем по одной букве s:= s + 'Ваша буква', а затем просто выводим эту строку в memo memo.lines.insert(0, s). Конечно перед этим не забыв удалить старую строку memo.Lines.Delete(0).
Код:
var
s: string;

procedure TForm1.Button3Click(Sender: TObject);
var
i: byte;
begin
for i:= 0 to 19 do
begin
sleep(200); // Задержка выполнения, для наглядности
s:= s + 's'; // Добавляем символ в строку
memo1.Lines.Delete(0); // Удаляем старую строку
memo1.Lines.Insert(0, s); // Всталяем новую строку
end;
end;
или так
Код:
memo1.Lines.Strings[0]:= memo1.Lines.Strings[0] + 's';

Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Мастер-Эксперт
319965
1463
09.04.2010, 22:04
общий
Камынин Владислав Дмитриевич:
Memo1.Text:=Memo1.Text+s[i];
давно
Мастер-Эксперт
319965
1463
09.04.2010, 22:05
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.
Memo1.Text:=Memo1.Text+s[i];
Неизвестный
09.04.2010, 22:06
общий
star9491, спасибо! Тоже вариант))
Неизвестный
09.04.2010, 22:40
общий
Можно и так:
memo.Lines[i]:=memo.Lines[i]+MyChar
Неизвестный
10.04.2010, 00:45
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.

В предложенном выше способе как минимум сбивается позиция курсора.
К тому же при разрастании текста бестолковое копирование текста приведет к лишней нагрузке на систему.
Всех причин не упомню почему меня это не устроило. Вполне возможно, что возникает мерцание.

Беглый взгляд на исходники 5-летней давности показывает, что для вставки буквы в текущую позицию курсора подходит код
Memo.SelText=c;

Неизвестный
10.04.2010, 00:59
общий
Камынин Владислав Дмитриевич:
Приведенный мной код естественно сотрет выделенный текст, да и курсор следует установить в соответствующую позицию. Это несложно с помощью сообщения EM_SETSEL.
P.S. не помню проверку на Tmemo, но с Trichedit все прекрасно работало.
давно
Мастер-Эксперт
319965
1463
10.04.2010, 13:58
общий
Vadim22:
курсор следует установить в соответствующую позицию. Это несложно с помощью сообщения EM_SETSEL


Вообще говоря для этого есть штатная процедура: Memo1.SelStart:=pos;
Форма ответа