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(§);
Form1->Label1->Caption = stage1; //отображаем текущее положение лифтов
Form1->Label2->Caption = stage2;
Form1->Label3->Caption = stage3;
Form1->Label4->Caption = stage4;
LeaveCriticalSection(§);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
EnterCriticalSection(§); //входим в критическую секцию
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 этаже
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.