floor1 = 8;
if(Panel11->Top >= perv-prolet*7) //лифт на 7 этаже
floor1 = 7;
if(Panel11->Top >= perv-prolet*6) //лифт на 6 этаже
floor1 = 6;
if(Panel11->Top >= perv-prolet*5) //лифт на 5 этаже
floor1 = 5;
if(Panel11->Top >= perv-prolet*4) //лифт на 4 этаже
floor1 = 4;
if(Panel11->Top >= perv-prolet*3) //лифт на 3 этаже
floor1 = 3;
if(Panel11->Top >= perv-prolet*2) //лифт на 2 этаже
floor1 = 2;
if(Panel11->Top >= perv-prolet*1) //лифт на 1 этаже
floor1 = 1;
}
if (floor1>Edit1->Text.ToInt()) // Если находимся выше, чем нужно
{
Form1->Panel11->Color = clBtnFace; // закрываем двери (это на случай,
//если пользователь меняет пункт назначения
//«по пути»
Panel11->Top += 5; //едем вниз
if(Panel11->Top >= perv-prolet*8) //лифт на 9 этаже
floor1 = 9;
if(Panel11->Top >= perv-prolet*7) //лифт на 8 этаже
floor1 = 8;
if(Panel11->Top >= perv-prolet*6) //лифт на 7 этаже
floor1 = 7;
if(Panel11->Top >= perv-prolet*5) //лифт на 6 этаже
floor1 = 6;
if(Panel11->Top >= perv-prolet*4) //лифт на 5 этаже
floor1 = 5;
if(Panel11->Top >= perv-prolet*3) //лифт на 4 этаже
floor1 = 4;
if(Panel11->Top >= perv-prolet*2) //лифт на 3 этаже
floor1 = 3;
if(Panel11->Top >= perv-prolet*1) //лифт на 2 этаже
floor1 = 2;
if(Panel11->Top >= perv) //лифт на 1 этаже
floor1 = 1;
}
}
LeaveCriticalSection(§); // выходим из критической секции
}
//---------------------------------------------------------------------------
Вид окна приложения:
Листинги:
1) Листинг заголовочного файла программы Unit1.h:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer5;
TTimer *Timer6;
TTimer *Timer7;
TTimer *Timer8;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TEdit *Edit4;
TUpDown *UpDown1;
TUpDown *UpDown2;
TUpDown *UpDown3;
TUpDown *UpDown4;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TButton *Button5;
TPanel *Panel1;
TPanel *Panel2;
TPanel *Panel3;
TPanel *Panel4;
TPanel *Panel5;
TPanel *Panel6;
TPanel *Panel7;
TPanel *Panel8;
TPanel *Panel9;
TPanel *Panel10;
TPanel *Panel11;
TPanel *Panel12;
TPanel *Panel13;
TPanel *Panel14;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcall Timer5Timer(TObject *Sender);
void __fastcall Timer6Timer(TObject *Sender);
void __fastcall Timer7Timer(TObject *Sender);
void __fastcall Timer8Timer(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
2) Листинг файла Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#define perv 288 // первый этаж. Расстояние от верхнего края формы
#define prolet 32 // расстояние между этажами
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int floor1; //Переменные, хранящие "положение" кабины (этаж)
int floor2;
int floor3;
int floor4;
int dest_st1; // Пункт назначения (номер этажа)
int dest_st2;
int dest_st3;
int dest_st4;
HANDLE hThread1; //дескриптор вторичного потока
TRTLCriticalSection sect; //дескриптор критической секции
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
floor1=1; //Все кабины на первом этаже
floor2=1;
floor3=1;
floor4=1;
dest_st1=1; //Все кабины хотят ехать на первый этаж
dest_st2=1;
dest_st3=1;
dest_st4=1;
}
//---------------------------------------------------------------------------
DWORD WINAPI ThreadFunc1(void *p) //функция вторичного потока
{
while(1)
{
EnterCriticalSection(§);
Form1->Label1->Caption = floor1; //отображаем текущее положение лифтов
Form1->Label2->Caption = floor2;
Form1->Label3->Caption = floor3;
Form1->Label4->Caption = floor4;
LeaveCriticalSection(§);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer5->Enabled=true;
Form1->Panel11->Color = clBtnFace;
dest_st1 = Edit1->Text.ToInt();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer6->Enabled=true;
Form1->Panel12->Color = clBtnFace;
dest_st2 = Edit2->Text.ToInt();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.