В этом урока мы продолжим знакомиться с компонентами Lazarus. Сегодня для создания проекта «Светофор» нам понадобятся компоненты: Timer (Таймер), Shape (Фигуры), Panel (Панель).
Перед созданием приложения следует изучить описание новых компонентов.
Задание. Смоделировать работу светофора. При запуске проекта панель светофора должна быть пустой. После нажатия на кнопку Пуск лампочки светофора начинают переключатся. После нажатия на кнопку Стоп – панель светофора опять пустая. С помощью таймера обеспечить смену сигнала светофора через равные промежутки времени. В поле Скорость вводится интервал таймера.
Ход выполнения проекта
1. Создайте новый проект. Сохраните его в отдельной папке, назовите ее «Светофор».
2. Разместите на форме панель (TPanel) c тремя фигурами (TShape), две кнопки (TButton), текстовое поле (TEdit), надпись (TLabel), таймер (TTimer) в соответствии с образцом:
Это должно выглядеть следующим образом:
2. Делаем оформление:
Установите данные значения свойств в инспекторе объектов:
Компонент | Свойство | Значение |
Form1 | Caption | Светофор |
Panel1 | Caption | *Пусто* |
Shape1 | Shape | stCircle |
Shape2 | Shape | stCircle |
Shape3 | Shape | stCircle |
Label1 | Caption | Скорость |
Edit1 | Text | *пусто* |
Button1 | Caption | Пуск |
Button2 | Caption | Стоп |
3. Создаем событие для Form1 в разделе OnCreate – Нажать троеточие
Создаем событие для Timer1 в разделе OnTimer – Нажать троеточие
4. Задаем цвета фигурам:
Компонент | Свойство | Значение |
Shape1 | Brush(Нажать на стрелочку слева от свойства и выбрать color) | clRed |
Shape2 | Brush(Нажать на стрелочку слева от свойства и выбрать color) | clYellow |
Shape3 | Brush(Нажать на стрелочку слева от свойства и выбрать color) | clGreen |
Финальный вид работы:
5. Во время загрузки формы таймер отключается, фигуры на панели становятся невидимыми.
Создаем обработчик события FormCreate (дважды щелкаем по компоненту Form1) и вставляем данный код:
var k:integer; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled:=false; Shape1.Visible:=false; Shape2.Visible:=false; Shape3.Visible:=false; end;
6. Чтобы переключались лампочки светофора, напишите программный код в обработчике события Timer1Timer. Код этот будет выполняться с интервалом, который пользователь введет в поле Скорость. По показаниям таймера определяется номер лампочки, которая должна включиться в данный момент.
Дважды щелкаем по компоненту Timer1 и вставляем данный код:
6. Напишите программный код для кнопки Пуск. По щелчку на кнопке из поля Скорость считывается интервал для таймера, зануляется показания таймера, таймер включается.
Дважды щелкаем по компоненту Button1 и вставляем код:
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Interval:=StrToInt(Edit1.text); k:=0; Timer1.Enabled:=true; end;
7. Напишите программный код для кнопки Стоп. После щелчка на кнопке таймер должен отключиться, лампочки светофора снова становятся невидимыми.
Дважды щелкаем по компоненту Button2 и вставляем код:
procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=false; Shape1.Visible:=false; Shape2.Visible:=false; Shape3.Visible:=false; end;
8. Запустите проект. В поле Скорость введите число 1000 (1000 мс=1с). Лампочки светофора начнут переключаться с интервалом в одну секунду.
Артем Позняк, ученик 10 «А» класса СОШ №23, г. Экибасбуз
procedure TForm1.Timer1Timer(Sender: TObject);
begin
k:=k+1; //определяем, фигура с каким номером
//в данный момент должна быть видимой
if k mod 3=1 then
begin
Shape1.Visible:=true;
Shape2.Visible:=false;
Shape3.Visible:=false;
end
else
if k mod 3=2 then
begin
Shape1.Visible:=false;
Shape2.Visible:=true;
Shape3.Visible:=false;
end
else
begin
Shape1.Visible:=false;
Shape2.Visible:=false;
Shape3.Visible:=true;
end
end; если кому лень )
Пацан,спасибо,так лень было писать,с меня должок 🙂
Отличная работа. Спасибо Артем.
у меня не получился светофор совсем не отображается и пишет ошибку , что нужно убить процессы но это не помогает.
Хорошо постарался, жаль, что уроков так мало…