Главная » Уроки по ООП » Урок 1. Принципы ООП. Классы и объекты

Урок 1. Принципы ООП. Классы и объекты

Уровень 1

Задание 1: В момент создания формы должна динамически создаваться кнопка в левом верхнем углу формы. При нажатии на кнопку должно выдаваться сообщение «Проверка».
Ход решения:

  1. Создайте новое приложение
  2. Щелкните дважды по форме. Откроется заготовка события onCreate для формы. В тело процедуры внесите следующий код:
  3. MyButton:=TButton.Create(Form1);  //Создаем новую кнопку
      MyButton.Parent:=Form1; 
    //Устанавливаем расположение новой кнопки
      MyButton.Top:=5;
      MyButton.Left:=10;
      MyButton.Width:=100;
      MyButton.Height:=25;
      MyButton.Caption:='Новая кнопка';
      MyButton.OnClick:=MyAction;

  4. Опишите в разделе Var переменную (объект)
  5. MyButton: TButton;

  6. Добавьте процедуру MyAction.
  7.  

    procedure TForm1.MyAction(Sender: TObject);
    begin
      ShowMessage('Проверка');
    end;

  8. В разделе private класса формы внесите объявление этой процедуры.


{ Private declarations }
    procedure MyAction(Sender:TObject);
public

Запустите программу. На форме появится кнопка, при нажатии на которую выдастся сообщение «Проверка».

Уровень 2

Задание 2. Добавить в программу из первого уровня динамическое создание компонента Edit рядом с кнопкой.

 

Задание 3. (Составлено по статье Г.Н. Гутмана в газете «Информатика» № 21 2003г)
При нажатии на кнопку "Создать объект" программа должна будет создать круг со случайны­ми параметрами (размер, цвет) и поместить его в произ­вольном месте панели. При нажатии на кнопку "Удалить объект" программа должна выполнить два действия:
1.      удалить изображение объекта с экрана
2.      освободить память, выделенную объекту конструктором.

Ход работы

Начните новый проект в Delphi и сохраните его в отдельной папке под названием “Figures”. Разместите на форме компоненты, показанные на рисунке.

Созданные объекты будем хранить в списке TList, т.к. мы не знаем заранее, сколько объектов создадим (это это массив, размер которого увеличивается в процессе заполнения). В его свойстве Items хранятся указатели типа Pointer, поэтому элементами списка могут быть объекты любого типа.

Вставьте в модуль объявление переменной List типа TList:

var
Form1: TForm1;
  List : TList;
implementation
{$R *.DFM}

По­скольку список является классом Delphi, то его (список) тоже необходимо создать по общим правилам. Для этого дважды щелкните по пустому месту формы, таким образом вы создадите обработчик события onCreate для формы. Добавьте в него строку, выделенную жирным шрифтом:

procedure TForm1.FormCreate(Sender: TObject);
begin
  List:=TList.Create;
end;

Количество элементов в списке фиксируется в свойстве Count. Добавление нового объекта в список вне зависимости от его типа производится методом Add (при этом Count увеличивается на единицу), удаление – методом Delete (при этом Count уменьшается на единицу). Однако нужно помнить, что элементами списка являются указатели, следовательно, удаление указателя из списка не удаляет сам объект из памяти. Поэтому при закрытии формы, прежде чем удалить список, следует освободить память, занятую созданными объектами.

Щелкните дважды по кнопке Button1 («Создать объект») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом:

procedure TForm1.Button1Click(Sender: TObject);
var AObj : TShape;  delta : word;
begin
  AObj:=TShape.Create(Panel1); // Создаем объект AObj типа TShape на панели Panel1
  AObj.Parent:=Panel1; // Указываем ссылку на объект-владелец (место «рождения»)
  // форма фигуры - круг
  AObj.Shape:=stCircle;
  // диаметр круга - случайное число от 10 до 60
  delta:=10+random(50);
  AObj.Width:=delta;
  AObj.Height:=delta;
  // "разыгрываем" место круга внутри панели
  AObj.Left:=random(Panel1.Width-AObj.Width);
  AObj.Top:=random(Panel1.Height-AObj.Height);
  // задаем цвет круга
  AObj.Brush.Color:=RGB(random(256),random(256),random(256));
  // добавляем созданную фигуру в список
  List.Add(AObj);
end;

 

Уровень 3

Продолжение проекта «Фигуры»

Щелкните дважды по кнопке Button2 («Удалить объект») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом:

procedure TForm1.Button2Click(Sender: TObject);
var Temp: TShape;
begin
  with List do
  if Count>0 then begin
    Temp:=Items[Count-1]; // В Temp – ссылка на последний созданный объект
    Temp.Free;
    Delete(Count-1);
  end;
end;

Щелкните дважды по кнопке Button3 («Удалить все») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом:

procedure TForm1.Button3Click(Sender: TObject);
var Temp: TShape;
begin
  with List do
  while Count>0 do begin
    Temp:=Items[Count-1];
    Temp.Free;
    Delete(Count-1);
  end;
end;

Щелкните по пустому месту формы, перейдите на вкладку Events инспектора, щелкните дважды по полю ввода события OnClose и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Button3.Click;  // запускаем процедуру удаления объектов
  List.Free;  //удаляем список указателей
end;

И, наконец, поскольку фигуры на панели будут возникать случайным образом, необходимо будет вызвать один раз в программе процедуру Randomize, которая подготавливает к работе датчик случайных чисел. Можно сделать это  в событии OnCreate формы, но мы для разнообразия используем секцию initialization нашего модуля.  Для этого поместим в самый конец модуля перед end с точкой следующие строки:

…………………..
initialization
  randomize;
end.

На рисунке приведен примерный вид окна программы после запуска.

Задание 4. Попробуйте переделать программу так, чтобы кроме кругов на панели появлялись фигуры и другой формы.

 

 

 


 

Составитель: Салий Н.А.

Яндекс.Метрика
Сайт создан в системе uCoz