«Lazarus — свободная среда разработки программного обеспечения для компилятора Free Pascal Compiler. Интегрированная среда разработки предоставляет возможность кроссплатформенной разработки приложений в Delphi-подобном окружении.»
Я буду использовать Debian 6.0.2.1 и Lazarus 0.9.28.2-12 beta. По поводу установки. В debiane все сделалось одной командой:
apt-get install lazarus
В других linux’ах по разному. Например в Ubuntu — так же, потому что она построена на основе Debian. В Arch Linux не намного сложнее:
pacman -S lazarus
Теперь приступим к программированию. Наша задача:
- Создать форму с кнопкой и лейбой;
- Создать свой класс Timer’a. Добавить ему необходимые методы;
- Создать автоматическую работу нашего таймера, на основе системного таймера.
И так, поехали. Создадим форму. Добавим на нее кнопку и лейбу. Переименуем их в понятные имена:
Создание класса в Lazarus такое же простое, как и в Delphi. Для начала создадим новый модуль (Файл — Создать модуль). В нем будет реализован наш класс. Напишем простой интерфейс класса, в разделе type:
TMTimer = class(TObject) private fTime: integer; public constructor Create; procedure IncTime(); function GetTime(): integer; end;
После этого можно реализовать методы класса:
constructor TMTimer.Create; begin fTime:= 0; end; procedure TMTimer.IncTime(); begin fTime:= fTime + 1; end; function TMTimer.GetTime(): integer; begin result:= fTime; end;
Конечно же, все очень «сложно». Теперь реализуем следующее. При нажатии на кнопку, значение нашего счетчика будет увеличиваться и записываться в лейбу. Для этого в главном юните добавим переменную нашего таймера:
uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, TMyTimer;
Подключили в uses наш юнит. Теперь:
var FrmMain: TFrmMain; MyTimer: TMTimer;
Этим мы объявили саму переменную таймера. Далее необходимо ее инициализировать с помощью конструктора. Заодно и опишем событие кнопки.
procedure TFrmMain.FormCreate(Sender: TObject); begin MyTimer:= TMTimer.Create; end; procedure TFrmMain.BtnTickClick(Sender: TObject); begin MyTimer.IncTime(); LblTick.Caption:= IntToStr(MyTimer.GetTime()); end;
Как видите, все очень просто. Процедура создания формы вызывает создание нашего таймера, а нажатие на кнопку, вызывает инкремент таймера. Теперь сделаем чуток сложнее. Добавим системный таймер, при запуске которого, наша программа автоматически будет инкрементировать наш таймер. Добавим на форму компонент TTimer из вкладки System. Я хотел сделать динамический вариант создания таймера, но увы не вышло, таймер сильно «прирос» к форме.
Теперь реализуем событие таймера. Кликните два раза на событии OnTimer в свойствах вашего таймера, пишем код:
procedure TFrmMain.Timer1Timer(Sender: TObject); begin MyTimer.IncTime(); LblTick.Caption:= IntToStr(MyTimer.GetTime()); end;
Создадим кнопку BtnStartStop. Запишем в ее событие Onclick следующий код:
procedure TFrmMain.BtnStartStopClick(Sender: TObject); begin if (Timer1.Enabled = false) then begin Timer1.Interval:= 1000; Timer1.Enabled:= true; end else Timer1.Enabled:= false; end;
Мы проверяем, работает ли таймер. Если нет — включаем, если да — выключаем. Не забудем добавить в событие создание формы строчку:
Timer1.Enabled:= false;
Что бы наш таймер не запускался сам при запуске приложения. Запускаем. Если все работает, идем дальше. Расширим наш класс TMTimer методом SetTime:
procedure TMTimer.SetTime(value: integer); begin fTime:= value; end;
Добавим кнопку BtnSetTime, а в нее:
procedure TFrmMain.BtnSetTimeClick(Sender: TObject); begin MyTimer.SetTime(StrToInt(Edit1.Text)); end;
Все очень просто. Запускаем, проверяем. Все должно работать.
Спрашивайте свои ответы, пишите замечания и предложения.
ЭЭЭЙ, как сделать так, чтобы при нажатии кнопки менялся текст лейбла???????? СРОЧНО!!!
Увы, но я не могу срочно отвечать на комментарии, так как мой блог — не коммерческий проект. Да и вы, как-то, не очень вежливо просите, такое впечатление, что настаиваете. С таким подходом вам никто не ответит.
Ваш вопрос очень примитивный, вам стоит просто подучить Delphi (сам язык). Я в блоге помогаю студентам (возможно), но не выполнением за них работы, а знаниями.
Label1 или Label2.Caption:=’Сюда текст’;
Рома, по-моему вы ответили не срочно. Тут Виолетте хотелось БЫСТРО 🙂
Кстати, зацените мой блог на английском в шапке сайта.