Пробуем программировать в Lazarus

Попробуем написать очень простое приложение в среде разработки Lazarus. Что же это такое, «Lazarus»? Вот что пишет википедия:
«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

Теперь приступим к программированию. Наша задача:

  1. Создать форму с кнопкой и лейбой;
  2. Создать свой класс Timer’a. Добавить ему необходимые методы;
  3. Создать автоматическую работу нашего таймера, на основе системного таймера.

И так, поехали. Создадим форму. Добавим на нее кнопку и лейбу. Переименуем их в понятные имена:

Создание класса в 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;

Все очень просто. Запускаем, проверяем. Все должно работать.

Спрашивайте свои ответы, пишите замечания и предложения.

Комментарии 4

  • ЭЭЭЙ, как сделать так, чтобы при нажатии кнопки менялся текст лейбла???????? СРОЧНО!!!

    • Увы, но я не могу срочно отвечать на комментарии, так как мой блог — не коммерческий проект. Да и вы, как-то, не очень вежливо просите, такое впечатление, что настаиваете. С таким подходом вам никто не ответит.

      Ваш вопрос очень примитивный, вам стоит просто подучить Delphi (сам язык). Я в блоге помогаю студентам (возможно), но не выполнением за них работы, а знаниями.

    • Label1 или Label2.Caption:=’Сюда текст’;

      • Рома, по-моему вы ответили не срочно. Тут Виолетте хотелось БЫСТРО 🙂

        Кстати, зацените мой блог на английском в шапке сайта.

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

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