delphi memo перенос строки

При переводе из edit в memo, переносятся только две первые строки, остальные не отображаются, что делать?

1 ответ 1

У вас Memo1.Lines.Count=2 (это если вы текст дефолтовый из него не удалили), изменение Memo1.Lines[2] и т.д. не приводит ни к чему. Ибо

Получается SelStart=-1, и код дальше не выполняется.

Правильно работать с TMemo действительно через Clear и Add. Через индекс — тут хорошо еще exception не вылез, а то со StringList’ом получили бы index out of bounds.

. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.

11 мая 2011 г.

Задачка №10

Объяснить это поведение кода.

Нет никаких других потоков, стороннего вмешательства. Весь активный код — только в этих строчках. Не баг Delphi или системы. Версия Delphi значения не имеет. Вопрос на знание VCL.

Ответ на задачку будет выложен как обычно: примерно через месяц.

13 комментариев :

Delphi 2010
Задача не воспроизводится, S = ‘1.jpg’ 🙁

Разумеется «просто так» она не воспроизводится. Если бы она воспроизводилась — понять, что происходит, было бы делом 5 минут в отладчике.

В этом и состоит задача.

Разделителем строк указана точка?

>>> Разделителем строк указана точка?

Нет. Если бы это было так, точка не попала бы в строку.

Перенос строк в TMemo может зависеть от ширины компонента.
При свойствах по умолчанию и ширине Memo1 в 18 пикселей у меня получился описанный эффект.

Ну свойство WordWrap (дословно «перенос слов») отвечает за это дело.

Переносит строки по ширине
Делаем узкий TMemo и перенос пойдет автоматом
Получим столько символов в S, сколько влезет по ширине в строку
Ставим WordWrap в false и получаем S=’1.jpg’

Предупреждать надо, что еще какие-то условия есть. а то я уже озадачился, как же такое может произойти. Соглашусь по поводу wordwrap.

Может, мне надо было прямо сказать, что WordWrap = True? 😀

Ведь это default!

Да, получилась бы очень сложная задача — догадаться, что размер Memo надо уменьшить 🙂

это что, реально задача, или просто прикол такой, на тест трезвости после праздников?

Да вас не поймёшь, в какую сторону тянуть надо.

>>> Перенос строк в TMemo может зависеть от ширины компонента.
что, простите? Размер компонента влияет на содержимое??

Уважаемый Torbins очевидно имел в виду, что
LineBreak = ‘jpg’
или любой другой, начинающийся с ‘jpg’

>>>что, простите? Размер компонента влияет на содержимое??
При Memo1.WordWrap:=true влияет!

Эх. хотел ответить, почитал комменты, а тут уже ответили. Ну тогда дополню чтоль.
При TMemo.WordWrap=True компонент при чтении из TMemo.Lines[index] возвращает именно текст строки которая визуально отображается в TMemo. Это реализована в TMemoStrings в исходниках VCL. Сами же данные при этом TMemo не меняет, и получить все эти данные в неизменном виде можно через TMemo.Text

p.s. Авторы компонента даже свойство назвали Lines, а не Strings как в TStringList, пытаясь подчеркнуть особенность поведения.

Можно использовать некоторые HTML-теги, например:

Вам необязательно регистрироваться для комментирования — для этого просто выберите из списка «Анонимный» (для анонимного комментария) или «Имя/URL» (для указания вашего имени и (опционально) ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте «Имя/URL» вместо «Анонимный». URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром — не волнуйтесь, оно появится после проверки администратором.

Как на рисунке показано(подчеркнуто) Перенос в мемо задается автоматом,
Как исправить, перенос не нужет вообще?? Примерчик кода напишите.
И еще свойство WordWrap -False не катит. Надо как то удалить перенос,
чтобы мигающий знак был в конце написанной строки в мемо!

Оцените статью