Работа с компонентом Memo

Текст задания:
На форме располагаются компоненты: редактор Memo, кнопка «+», кнопка «-», кнопка «Очистить» и кнопка «Закрыть». Изначально в первой строке редактора находится число 0.
Нажатие кнопки «+» приводит к увеличению содержимого редактора на 1, а кнопки «-» , к уменьшению на 1.
Аналогичный результат может быть достигнут с помощью нажатия соответствующих кнопок клавиатуры.
Если число в редакторе больше 15, то появляется линейка прокрутки, с помощью которой ширину редактора можно менять в диапазоне 50 .. 200 пикселей.
Нажатие кнопки «Очистить» приводит к установке редактора в исходное состояние.
Нажатие кнопки «Закрыть» заканчивает программу.
Решение:
Создаем новый VCL-проект. Бросаем на форму компоненты Panel и Memo. У Panel очистите свойство Caption и установите свойство Align в alTop, она будет отображаться в верхней части формы. Положите на панель 4 кнопки Button, поменяйте их свойства Caption на «+», «-», «Очистить» и «Закрыть». Переименуйте кнопки на Add_Button,Del_Button,Clear_Button и Close_Button.
Чтобы Mеmo заполнил собой всю оставшуюся площадь формы, установите его свойство Align в alClient. Чтобы записать в первую строчку компонента Memo значение 0, кликните его свойство Lines, перед вами откроется редактор строк. Измените свойство формы Caption на «Работа с Memo» . Чтобы наша форма не могла менять своих размеров, поставьте свойство формы BorderStyle в bsSingle.
Получится должно что-то вроде этого:

memo
Вот коды обработки 4-х наших кнопок :
[cce lang=»delphi» tab_size=»2″ no_links=»false»]
procedure TForm1.Add_ButtonClick(Sender: TObject);
begin
Memo1.Lines.add(IntToStr(Memo1.Lines.Count));
end;
procedure TForm1.Del_ButtonClick(Sender: TObject);
begin
Memo1.Lines.Delete(Memo1.Lines.Count — 1);
end;
procedure TForm1.Clear_ButtonClick(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(‘0’);
end;
procedure TForm1.Close_ButtonClick(Sender: TObject);
begin
Close;
end;
[/cce]
Memo1.Lines.Count -это свойство, содержащее количество строчек в Memo. В начале работы программы это 1.
IntToStr- функция преобразования числа в строку.
Memo1.Lines.add () — это функция добавляющая в конец листа новую строчку, в скобках указывается сама строчка.
Итак, мы добавляем новое число в список строк, каждый новый раз оно увеличивается на единицу.
Memo1.Lines.Delete()-это функция удаляющая строчку по её индексу. Нам нужно получить последнюю, т.е. Memo1.Lines.Count – 1.
Memo1.Clear- это функция удаляющая все набранные в компоненте строки.
Close- закрывает программу.
Чтобы после 15-ой строчки появлялся ScrolBar, мы будем обрабатывать событие OnChange у компонента Memo .
[cce lang=»delphi» tab_size=»2″ no_links=»false»]
procedure TForm1.Memo1Change(Sender: TObject);
begin
if Memo1.Lines.count > 15
then
Memo1.ScrollBars := ssVertical
else
Memo1.ScrollBars := ssNone;
end;
[/cce]
Чтобы форма видела нажатые пользователем клавиши, нужно изменить её свойство KeyPreview в true. Обрабатывать надо два её события: OnKeyDown и OnKeyPress.
[cce lang=»delphi» tab_size=»2″ no_links=»false»]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = 107) then
begin
Add_ButtonClick(nil);
end;
if (Key = 109) then
begin
Del_ButtonClick(nil);
end
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = ‘+’) then
Add_ButtonClick(nil);
if (Key = ‘-‘) then
Del_ButtonClick(nil);
end;
[/cce]
В первом событии клавиши приходят как числа 107 и 109, во втором они приходят как символы.
Если фокус ввода установлен в Memo, тогда нужно обрабатывать его событие OnKeyPress.
[cce lang=»delphi» tab_size=»2″ no_links=»false»]
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = ‘+’) or (Key = ‘-‘) then Key := #0;
end;
[/cce]
Вот и вся задача. Скомпилируйте проект (нажмите F9) и проверьте, что все работает как по заданию.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *