1 июля 2011 г.

Ответ на задачку №10

Ответ на задачку №10.

В общем, как я и говорил: задача эта очень простая. Дело в том, что TMemo.Lines - это не TStringList, а TMemoStrings - наследник TStrings, который сам не хранит строки, а вместо этого является просто оболочкой к внутреннему хранилищу строк Memo. Когда содержимое Memo меняют, TMemoStrings отправляет текст в Memo. Когда у TMemoStrings запрашивают текст - он получает строки из Memo.

Соответственно, то, что возвращает нам TMemo.Lines, будет равно содержимому Memo, которое... меняется в зависимости от настроек редактора. В частности, если включено свойство WordWrap, то редактор будет переносить слова на следующую строку, если эти слова не помещаются в окне редактора.

Вот и рецепт: шрифт - побольше, а размер компонента - поменьше. А WordWrap... ну, он и так включен.

Причём работает это и в design-time:


Вы вводите
1.jpg
2.jpg
3.jpg
В свойство Lines в инспекторе объектов, но когда вы снова открываете редактор свойства Lines, то видите уже
1.
jp
g
2.
jp
g
3.
jp
g
Вот наша искомая '1.'.

3 комментария:

  1. Вот блин, а я думал TStringList.
    Буду знать.

    ОтветитьУдалить
  2. Update: по неизвестным мне причинам, даже если WordWrap = False, TMemo режет строки длиннее 1024 символов, перенося остаток на новую строку.

    ОтветитьУдалить
  3. Возможно:

    Limits of Edit Controls

    Edit controls were designed to enter, display, and edit small amounts of text. They were not meant to be the basis for large-scale text editors. Edit controls in Microsoft® Windows™ have the following limits:

    Single-line edit controls are limited to a maximum of 32K (32,767 bytes) of text and, of course, to a single line. By default, single-line edit controls are limited to 30,000 characters. An application can change this limit to a maximum of 32,767 characters with the EM_LIMITTEXT message.

    Multiple-line edit controls are limited to a maximum of 64K (65,535 bytes) of text. Whether a multiple-line edit control is actually able to approach this limit is based on how the edit control uses memory. Techniques to control the way edit controls use memory are described in the next section, "Edit Controls and Memory."

    Multiple-line edit controls are also limited to the following:
    - characters per line of text
    - lines of text
    - pixels per line of text

    ОтветитьУдалить

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

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

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

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

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

Примечание. Отправлять комментарии могут только участники этого блога.