Написание программы визуального отображения состояния кабины каждого лифта в девятиэтажном жилом доме, страница 2

class TForm1 : public TForm

{

__published:              // IDE-managed Components

        TButton *Button1;

        TPanel *Panel1;

        TPanel *Panel2;

        TPanel *Panel3;

        TPanel *Panel4;

        TTimer *Timer1;

        TTimer *Timer2;

        TTimer *Timer3;

        TTimer *Timer4;

        TButton *Button2;

        TButton *Button3;

        TButton *Button4;

        TButton *Button5;

        TEdit *Edit1;

        TEdit *Edit2;

        TEdit *Edit3;

        TEdit *Edit4;

        TLabel *Label1;

        TUpDown *UpDown1;

        TUpDown *UpDown2;

        TUpDown *UpDown3;

        TUpDown *UpDown4;

        TLabel *Label2;

        TLabel *Label3;

        TLabel *Label4;

        TPanel *Panel6;

        TPanel *Panel5;

        TTimer *Timer5;

        TPanel *Panel7;

        TPanel *Panel8;

        TPanel *Panel9;

        TPanel *Panel10;

        TPanel *Panel11;

        TPanel *Panel12;

        TPanel *Panel13;

        TPanel *Panel14;

        TPanel *Panel15;

        TPanel *Panel16;

        TPanel *Panel17;

        TPanel *Panel18;

        TPanel *Panel19;

        TPanel *Panel20;

        TPanel *Panel21;

        TPanel *Panel22;

        TPanel *Panel23;

        TPanel *Panel24;

        TTimer *Timer6;

        TTimer *Timer7;

        TTimer *Timer8;

        TPanel *Panel25;

        TPanel *Panel26;

        void __fastcall Timer1Timer(TObject *Sender);

        void __fastcall Button2Click(TObject *Sender);

        void __fastcall Button1Click(TObject *Sender);

        void __fastcall Timer5Timer(TObject *Sender);

        void __fastcall Timer6Timer(TObject *Sender);

        void __fastcall Timer7Timer(TObject *Sender);

        void __fastcall Timer8Timer(TObject *Sender);

        void __fastcall Timer2Timer(TObject *Sender);

        void __fastcall Timer3Timer(TObject *Sender);

        void __fastcall Timer4Timer(TObject *Sender);

        void __fastcall Button3Click(TObject *Sender);

        void __fastcall Button4Click(TObject *Sender);

        void __fastcall Button5Click(TObject *Sender);

        void __fastcall FormCreate(TObject *Sender);

        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

private:         // User declarations

public:                        // User declarations

        __fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Листинг файла Unit1.cpp:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#define nullet 624  //константа соответствует положению лифта на 1 этаже (от верхнего края формы)

#define delta 70    //"интервал" между этажами (между точками остановки лифта)

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

        int stage1;  //переменные хранящие положение лифта (этаж)

        int stage2;

        int stage3;

        int stage4;

        int napr1;   //направление движения лифта

        int napr2;

        int napr3;

        int napr4;

        int tick1;  //счётчики для закрывания-открывания дверей

        int tick2;

        int tick3;

        int tick4;

        bool open1; //состояния дверей (открыть или закрыть)

        bool open2;

        bool open3;

        bool open4;

        HANDLE hThread1; //дескриптор вторичного потока

        TRTLCriticalSection sect; //дескриптор критической секции

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{                   //задаем начальные значения переменных

        stage1 = 1;

        stage2 = 1;

        stage3 = 1;

        stage4 = 1;

        napr1 = 0;

        napr2 = 0;

        napr3 = 0;

        napr4 = 0;

        tick1 = 0;

        tick2 = 0;

        tick3 = 0;

        tick4 = 0;

        open1 = false;

        open2 = false;

        open3 = false;

        open4 = false;

}

//---------------------------------------------------------------------------

DWORD WINAPI ThreadFunc1(void *p) //функция вторичного потока

{

   while(1)

   {

     EnterCriticalSection(&sect);

     Form1->Label1->Caption = stage1; //отображаем текущее положение лифтов

     Form1->Label2->Caption = stage2;

     Form1->Label3->Caption = stage3;

     Form1->Label4->Caption = stage4;

      LeaveCriticalSection(&sect);

   }

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

  EnterCriticalSection(&sect); //входим в критическую секцию

  if(stage1 == Edit1->Text.ToInt())

  { //приехали

    Timer1->Enabled = false; //останавливаем лифт

    //открываем двери

    open1 = true;

    tick1 = 0;

    Timer5->Enabled = true;

  }

  else

  if(Timer5->Enabled == false) //проверяем закрыты ли двери

  {

          //перемещение лифта

          if(napr1 == 1)

          {

                Panel1->Top -= 5; //едем вверх

                if(Panel1->Top >= nullet-delta*9)      //лифт на 9 этаже

                        stage1 = 9;

                if(Panel1->Top >= nullet-delta*8)       //лифт на 8 этаже