§ 16. Компоненты для работы со списками строк

16.2. Компонент Мемо

Компонент многострочный редактор Memo предназначен для ввода, вывода и редактирования многострочных текстов. На панели компонентов Standard компонент Memo изображен в виде , имя объекта — Memo. Компонент Memo, помещенный на форму, получает имя  MemoN, где N  — номер 1, 2, 3… (пример 16.2).

Данный компонент, так же как и компонент, Edit снабжен функциями, присущими редакторам: копировать, вырезать, вставить, отмена последней команды редактирования. Некоторые свойства компонента приведены в примере 16.3.

Основное свойство компонента Memo — свойство Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение списка строк можно задать на этапе проектирования. Для этого нужно нажать кнопку  около свойства Lines в окне инспектора объектов. При этом откроется окно редактирования списков строк (String List Editor) (пример 16.4).

При выполнении программы для изменения содержимого окна компонента Memo применяются методы класса TString (см. пример 16.1).

Пример 16.5. Изменить проект Калькулятор из упражнения 3 (§6). Заменить компонент LabeledEdit3 (для вывода результата) компонентом Memo. Вести в компоненте Memo «журнал» действий: записывать каждый выполненный пример. Добавить кнопки: «Сохранить», нажав на которую, можно сохранить «журнал» в файл и «Очистить», нажав на которую можно очистить содержимое окна Memo.

Этапы выполнения задания

  1. Удалить компонент LabeledEdit3.
  2. Вставить компонент Memo1.
  3. Очистить компонент Memo1 с помощью окна редактирования списков строк.
  4. Изменить обработчики кнопок «+», «-», «*» и «/».
  5. Добавить на форму диалог SaveDialog1 для сохранения файла. Можно добавить диалог SaveTextFileDialog1, поскольку содержимым Memo являются строки и запись будет осуществляться в текстовый файл. Для того чтобы по умолчанию открывалась папка, содержащая исполняемый файл, в обработчик события FormCreate вписать команду
    SaveDialog1 -> InitialDir =  ExtractFilePath(ParamStr(0));
  6. Написать обработчик OnClick для кнопки «Сохранить».
  7. Написать обработчик OnClick для кнопки «Очистить».

Просмотреть содержимое сохраненного файла можно с использованием программы Блокнот.

Пример 16.2. Компонент Memо на форме:

Пример 16.3. Некоторые свойства компонента Memo:

Свойство

Назначение

Font

Определяет, как будет выглядеть текст внутри окна Memo. Формат всех строк для данного компонента одинаков

Alignment

Соответствуют аналогичным свойствам компонентов Label и Edit (примеры 6.8, 6.9)

WordWrap

ReadOnly

ScrollBars

определяет наличие полос прокрутки в окне. По умолчанию свойство имеет значение ssNone, что означает их отсутствие. Можно задавать значения: ssHorizontal (горизонтальная), ssVertical (вертикальная), ssBoth (обе)

Если включена горизонтальная полоса прокрутки, то игнорируется свойство WordWrap, которое отвечает на перенос слов на новую строку (перенос строк осуществляется только на экране, новые строки в список строк не добавляются).

Пример 16.4. Окно редактирования списка строк:

Пример 16.5. Форма на этапе проектирования:

Обработчик события OnClick для кнопки «Сумма».

void __fastcall TForm1::Button1Click
               (TObject *Sender)

{

  int a = StrToInt(LabeledEdit1 -> Text);

  int b = StrToInt(LabeledEdit2 -> Text);

  int c = a + b;

  String s = LabeledEdit1 -> Text +

       "+" + LabeledEdit2 -> Text +

       "=" + IntToStr(c);

  Memo1 -> Lines -> Add(s);

}

Обработчик события OnClick для кнопки «Сохранить»:

void __fastcall TForm1::Button5Click
                TObject *Sender)

{

  if (SaveDialog1 -> Execute())

    Memo1 -> Lines ->SaveToFile

    (SaveDialog1 -> FileName);

}

Обработчик события OnClick для кнопки «Очистить»:

void __fastcall TForm1::Button5Click
                (TObject *Sender)

{

  Memo1 -> Lines -> Clear();

}

Работающее приложение: