First commit 11/12/1999
This commit is contained in:
445
CtrlElemento.cpp
Normal file
445
CtrlElemento.cpp
Normal file
@ -0,0 +1,445 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
#include "CtrlPPal.h"
|
||||
#include "CtrlSocket.h"
|
||||
#include "CtrlElemento.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
#define Blinking 600
|
||||
|
||||
//###########################################################################
|
||||
//###########################################################################
|
||||
//###########################################################################
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TElemento::TElemento(TComponent* Owner)
|
||||
: TImage(Owner)
|
||||
{
|
||||
NumElemento = 0;
|
||||
myIP="0.0.0.0";
|
||||
|
||||
SurfaceIs = sfNone;
|
||||
|
||||
BlinkCode = IP_OFF; // Intentando conectar con el TERMINAL
|
||||
StatusCode= ERROR; // ERROR, aun no hemos conseguido conectar...
|
||||
|
||||
Blink = new TTimer(this); // Establecemos el timer, que mostrar<61> las advertencias
|
||||
Blink->OnTimer = OnBlink; // visuales de estado del componente.
|
||||
Blink->Interval = Blinking; // Inicialmente activo, con la advertencia IP_QUERY
|
||||
Blink->Enabled = true;
|
||||
|
||||
Revisor = new TTimer(this); // Este timer, se encargar<61> de comunicar el estado OFF
|
||||
Revisor->OnTimer = OnRevisor; // al TERMINAL-DOG, cuando proceda. ( Finalizado su tiempo ).
|
||||
Revisor->Interval = 0;
|
||||
Revisor->Enabled = false;
|
||||
PideMasTiempo = false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TElemento::~TElemento()
|
||||
{
|
||||
delete Blink;
|
||||
delete Revisor;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::SetElemento( int Elemento, AnsiString IP, AnsiString Name )
|
||||
{
|
||||
if ( ! IP.IsEmpty() && IP.Length() >= 7 )
|
||||
myIP = IP;
|
||||
NumElemento = Elemento;
|
||||
myName = Name;
|
||||
if ( !CtrlPPal->ServerHook )
|
||||
RefreshElement();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::RefreshElement(void)
|
||||
{
|
||||
BlinkCode = IP_QUERY;
|
||||
StatusCode = ERROR;
|
||||
// Blink->Enabled = true;
|
||||
Blink->Interval = Blinking;
|
||||
|
||||
//////// Vemos si el terminal esta activo ///////////////////////////////////
|
||||
ThreadSocket *MySocket;
|
||||
MySocket = (ThreadSocket *)CtrlPPal->GetThread();
|
||||
MySocket->SetSocket( myIP, 5432 );
|
||||
MySocket->OWNER_Element = this;
|
||||
MySocket->CtrlCOP = QueryTIME;
|
||||
MySocket->CtrlTiempo = TDateTime::CurrentTime();
|
||||
MySocket->Resume();
|
||||
//////// ///////////////////////////////////
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::HistoricoTermON( TDateTime CtrlTiempo )
|
||||
{
|
||||
bool UsaBono = (Precio == -1);
|
||||
if ( UsaBono ) Precio = 0;
|
||||
if ( PideMasTiempo )
|
||||
{
|
||||
ImporteAcumulado += Precio;
|
||||
if ( CtrlTiempo > TiempoPedido ) CtrlTiempo = TiempoPedido;
|
||||
} else {
|
||||
ImporteAcumulado = Precio;
|
||||
}
|
||||
|
||||
// Insertamos en el historial de usos, la activaci<63>n del terminal...
|
||||
CtrlPPal->TbHistorial -> InsertRecord( ARRAYOFCONST(( NumElemento,
|
||||
(Variant)TiempoComienzo,
|
||||
(Variant)CtrlTiempo, idc, idtc, Precio )) );
|
||||
CtrlPPal->TbHistorial -> FlushBuffers();
|
||||
// Descontamos al cliente su tiempo del bono...
|
||||
if ( UsaBono )
|
||||
{
|
||||
TBookmark SavePlace;
|
||||
// get a bookmark so that we can return to the same record
|
||||
SavePlace = CtrlPPal->TbPersonas->GetBookmark();
|
||||
|
||||
if ( CtrlPPal->TbPersonas->Locate( "CodCliente1", idc, TLocateOptions() << loCaseInsensitive) )
|
||||
{
|
||||
unsigned short Hour, Min, Sec, MSec;
|
||||
CtrlTiempo.DecodeTime( &Hour, &Min, &Sec, &MSec );
|
||||
|
||||
NCliente = CtrlPPal->TbPersonas->FieldByName("Nombre")->AsString + " " + CtrlPPal->TbPersonas->FieldByName("Apellidos")->AsString;
|
||||
CtrlPPal->TbPersonas->Edit();
|
||||
if ( CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger < Min )
|
||||
{
|
||||
CtrlPPal->TbPersonas->FieldByName("TiempoH")->AsInteger = CtrlPPal->TbPersonas->FieldByName("TiempoH")->AsInteger - Hour -1;
|
||||
CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger = (CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger +60 - Min);
|
||||
} else {
|
||||
CtrlPPal->TbPersonas->FieldByName("TiempoH")->AsInteger = CtrlPPal->TbPersonas->FieldByName("TiempoH")->AsInteger - Hour;
|
||||
CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger = CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger - Min;
|
||||
}
|
||||
|
||||
CtrlPPal->TbPersonas->FieldByName("FModif")->AsDateTime = TDateTime::CurrentDateTime();
|
||||
CtrlPPal->TbPersonas->Post();
|
||||
CtrlPPal->TbPersonas->FlushBuffers();
|
||||
} else {
|
||||
NCliente = "## No ENCONTRADO ##";
|
||||
}
|
||||
// Move back to the bookmark
|
||||
CtrlPPal->TbPersonas->GotoBookmark(SavePlace);
|
||||
CtrlPPal->TbPersonas->FreeBookmark(SavePlace);
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::SetActiveTime( TDateTime Tiempo, int L_idc, int L_idtc, Currency L_Precio )
|
||||
{
|
||||
idc = L_idc; idtc = L_idtc; Precio = L_Precio;
|
||||
TDateTime Queda = TiempoRestante();
|
||||
BlinkCode = IP_QUERY;
|
||||
StatusCode = ERROR;
|
||||
// Blink->Enabled = true;
|
||||
Blink->Interval = Blinking;
|
||||
|
||||
if ( Revisor->Enabled )
|
||||
{
|
||||
PideMasTiempo = true;
|
||||
Revisor->Enabled = false;
|
||||
TiempoComienzo = TDateTime::CurrentDateTime() + Queda;
|
||||
} else {
|
||||
PideMasTiempo = false;
|
||||
TiempoComienzo = TDateTime::CurrentDateTime();
|
||||
}
|
||||
TiempoPedido = Tiempo;
|
||||
|
||||
ThreadSocket *MySocket;
|
||||
MySocket = (ThreadSocket *)CtrlPPal->GetThread();
|
||||
MySocket->SetSocket( myIP, 5432 );
|
||||
MySocket->CtrlCOP = SettingSTATUS;
|
||||
MySocket->OWNER_Element = this;
|
||||
if ( PideMasTiempo )
|
||||
MySocket->CtrlTiempo = TiempoPedido + Queda;
|
||||
else
|
||||
MySocket->CtrlTiempo = TiempoPedido;
|
||||
MySocket->CtrlState = true;
|
||||
MySocket->Resume();
|
||||
|
||||
unsigned short hour, min, sec, msec;
|
||||
if ( PideMasTiempo ) Tiempo = Tiempo + Queda;
|
||||
Tiempo.DecodeTime( &hour, &min, &sec, &msec );
|
||||
Revisor->Interval = msec + ( sec + ( (min+0) + hour*60 )*60 )*1000 ;
|
||||
Revisor->Enabled = true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::OnBlink(TObject *Sender)
|
||||
{
|
||||
|
||||
ultImagen = !ultImagen;
|
||||
// Mostrar parpadeo seg<65>n corresponda...
|
||||
switch ( BlinkCode )
|
||||
{
|
||||
case IP_OFF:
|
||||
if ( SurfaceIs != sfRoja )
|
||||
{
|
||||
SurfaceIs = sfRoja;
|
||||
Picture = CtrlPPal->iElemento2->Picture;
|
||||
WriteMyName();
|
||||
}
|
||||
if ( ultImagen )
|
||||
Canvas->Draw( 17, 3, CtrlPPal->iElemento3->Picture->Graphic );
|
||||
else
|
||||
Canvas->FillRect(Rect(17,4,60,48));
|
||||
break;
|
||||
case IP_QUERY:
|
||||
if ( SurfaceIs != sfAzul )
|
||||
{
|
||||
SurfaceIs = sfAzul;
|
||||
Picture = CtrlPPal->iElementoV->Picture;
|
||||
WriteMyName();
|
||||
}
|
||||
if ( ultImagen )
|
||||
Canvas->Draw( 17, 3, CtrlPPal->iElemento4->Picture->Graphic );
|
||||
else
|
||||
Canvas->FillRect(Rect(17,4,60,48));
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
ShowElementInfo();
|
||||
break;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::OnRevisor(TObject *Sender)
|
||||
{
|
||||
ForcedTimeOut();
|
||||
// ShowMessage(
|
||||
CtrlPPal->Memo1->Lines->Insert( 0, (Now()).DateTimeString() + Format( " Terminal %d. Fin de Tiempo. :_)", ARRAYOFCONST((NumElemento))));
|
||||
|
||||
Revisor->Enabled = false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::ForcedTimeOut(void)
|
||||
{
|
||||
Revisor->Enabled = false;
|
||||
StatusCode = ERROR; // Estamos en proceso de COMPROBACION / ERROR
|
||||
BlinkCode = IP_QUERY; // --- INTENTANDO COMUNICAR --
|
||||
// Blink->Enabled = true; // Activamos el parpadeo
|
||||
Blink->Interval = Blinking;
|
||||
|
||||
/// ENVIAMOS EL MENSAJE...
|
||||
ThreadSocket *MySocket;
|
||||
MySocket = (ThreadSocket *)CtrlPPal->GetThread();
|
||||
MySocket->SetSocket( myIP, 5432 );
|
||||
MySocket->CtrlCOP = SettingSTATUS;
|
||||
MySocket->OWNER_Element = this;
|
||||
MySocket->CtrlState = false;
|
||||
MySocket->Resume();
|
||||
|
||||
//################################################################################################
|
||||
TBookmark SavePlace;
|
||||
SavePlace = CtrlPPal->TbElementosCFG->GetBookmark();
|
||||
if ( CtrlPPal->TbElementosCFG -> Locate( "NumElement", NumElemento, TLocateOptions() << loCaseInsensitive ) )
|
||||
{
|
||||
if ( CtrlPPal->TbElementosCFG->FieldByName( "Activo" )->AsBoolean )
|
||||
{
|
||||
CtrlPPal->TbElementosCFG->Edit();
|
||||
CtrlPPal->TbElementosCFG->FieldByName( "Tiempo" )->AsDateTime = EncodeTime( 0, 0, 0, 0 );
|
||||
CtrlPPal->TbElementosCFG->FieldByName( "Activo" )->AsBoolean = false;
|
||||
CtrlPPal->TbElementosCFG->Post();
|
||||
}
|
||||
}
|
||||
CtrlPPal->TbElementosCFG->GotoBookmark(SavePlace);
|
||||
CtrlPPal->TbElementosCFG->FreeBookmark(SavePlace);
|
||||
//################################################################################################
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
Picture = CtrlPPal->iElemento2->Picture;
|
||||
if ( CtrlPPal->ChangePositionEnabled )
|
||||
{
|
||||
if ( Button == mbLeft )
|
||||
ElementoAnclado = true;
|
||||
faElmX = X;
|
||||
faElmY = Y;
|
||||
}
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::MouseMove(TShiftState Shift, int X, int Y)
|
||||
{
|
||||
if ( CtrlPPal->ChangePositionEnabled )
|
||||
{
|
||||
if ( ElementoAnclado )
|
||||
{
|
||||
POINT MousePos;
|
||||
GetCursorPos(&MousePos);
|
||||
Left = MousePos.x - CtrlPPal->Left - CtrlPPal->Pizarra->Left - faElmX;
|
||||
Top = MousePos.y - CtrlPPal->Top - CtrlPPal->Pizarra->Top - faElmY;
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
// (Mover)
|
||||
if ( Button == mbLeft )
|
||||
{
|
||||
if ( CtrlPPal->ChangePositionEnabled )
|
||||
{
|
||||
ElementoAnclado = false;
|
||||
if ( Left <= 0 ) Left = 0;
|
||||
if ( Top <= 0 ) Top = 0;
|
||||
|
||||
// ##########################################################################################
|
||||
if ( CtrlPPal->TbElementosCFG -> Locate( "NumElement", NumElemento, TLocateOptions() << loCaseInsensitive ) )
|
||||
{
|
||||
CtrlPPal->TbElementosCFG -> Edit();
|
||||
CtrlPPal->TbElementosCFG -> FieldByName("PosX") -> AsInteger = Left;
|
||||
CtrlPPal->TbElementosCFG -> FieldByName("PosY") -> AsInteger = Top;
|
||||
CtrlPPal->TbElementosCFG -> Post();
|
||||
}
|
||||
// ##########################################################################################
|
||||
}
|
||||
}
|
||||
SurfaceIs = sfNone;
|
||||
ShowElementInfo();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
// TiempoInicio --> Tiempo que queda hasta la desconexi<78>n
|
||||
void __fastcall TElemento::ClientTimeIs( double Tiempo, double TiempoInicio )
|
||||
{
|
||||
BlinkCode = NONE;
|
||||
// Blink->Enabled = false;
|
||||
Blink->Interval = 60000;
|
||||
|
||||
if ( Tiempo <= 0 )
|
||||
{
|
||||
StatusCode = FREE;
|
||||
Revisor->Enabled = false;
|
||||
} else {
|
||||
if ( StatusCode !=WORKING || (double)TiempoPedido < Tiempo )
|
||||
{
|
||||
TiempoComienzo = ( TDateTime::CurrentTime() - (Tiempo - TiempoInicio) );
|
||||
// TiempoComienzo = TiempoInicio;
|
||||
TiempoPedido = Tiempo;
|
||||
|
||||
unsigned short hour, min, sec, msec;
|
||||
RTiempoRestante = TiempoInicio;
|
||||
RTiempoRestante.DecodeTime( &hour, &min, &sec, &msec );
|
||||
|
||||
Revisor->Enabled = false;
|
||||
Revisor->Interval = msec + ( sec + ( (min+0) + hour*60 )*60 )*1000 ;
|
||||
Revisor->Enabled = true;
|
||||
}
|
||||
StatusCode = WORKING;
|
||||
}
|
||||
|
||||
ShowElementInfo();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::ShowElementInfo( void )
|
||||
{
|
||||
if ( StatusCode != ERROR )
|
||||
{
|
||||
// Picture = StatusCode != FREE ? CtrlPPal->iElementoV->Picture : CtrlPPal->iElemento5->Picture;
|
||||
Picture = CtrlPPal->iElementoV->Picture;
|
||||
WriteMyName();
|
||||
|
||||
unsigned short h, m, s, ms; int w;
|
||||
AnsiString sOUT;
|
||||
|
||||
Canvas->Font->Size = 12;
|
||||
sOUT = "# " + AnsiString( NumElemento ) + " #"; w = ( 44 - Canvas->TextWidth( sOUT ) ) / 2;
|
||||
|
||||
// En caso de estar activo el terminal
|
||||
if ( StatusCode == WORKING )
|
||||
{
|
||||
Canvas->Font->Color = clRed; /*Nombre del Terminal*/ Canvas->TextOut( 17+w, 3, sOUT );
|
||||
|
||||
Canvas->Font->Color = clBlue; Canvas->Font->Size = 10;
|
||||
|
||||
// Hora en la que inicia la sesi<73>n.
|
||||
TiempoComienzo.DecodeTime( &h, &m, &s, &ms );
|
||||
sOUT = Format( "%02d:%02d", ARRAYOFCONST(( h, m )) );
|
||||
w = ( 44 - Canvas->TextWidth( sOUT ) ) / 2;
|
||||
Canvas->TextOut( 17+w, 22, sOUT );
|
||||
// Tiempo de juego que le queda
|
||||
TDateTime Queda;
|
||||
Queda = TiempoRestante();//TiempoPedido + TiempoComienzo - TDateTime::CurrentTime();
|
||||
Queda.DecodeTime( &h, &m, &s, &ms );
|
||||
Canvas->TextOut( 17, 35, Format( "R: %02d:%02d", ARRAYOFCONST(( h, (m+1) ))) );
|
||||
/*
|
||||
// Tiempo de juego que le fue asignado
|
||||
(TbElementosCFG->FieldByName( "Tiempo" )->AsDateTime).DecodeTime( &h, &m, &s, &ms );
|
||||
E->Canvas->TextOut( 17, 40, Format( "((( %02d:%02d )))", ARRAYOFCONST(( h, m ))) );
|
||||
*/
|
||||
} else {
|
||||
Canvas->Font->Color = clBlue;
|
||||
// Nombre/N<>mero del terminal
|
||||
Canvas->TextOut( 17+w, 3, sOUT );
|
||||
|
||||
// El terminal esta libre
|
||||
Canvas->Font->Color = clGreen;
|
||||
Canvas->TextOut( 15, 25, "LIBRE" );
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::CerrarWindows( void )
|
||||
{
|
||||
StatusCode = ERROR; // Estamos en proceso de COMPROBACION / ERROR
|
||||
BlinkCode = IP_QUERY; // --- INTENTANDO COMUNICAR --
|
||||
// Blink->Enabled = true; // Activamos el parpadeo /// ENVIAMOS EL MENSAJE...
|
||||
Blink->Interval = Blinking;
|
||||
|
||||
ThreadSocket *MySocket;
|
||||
MySocket = (ThreadSocket *)CtrlPPal->GetThread();
|
||||
MySocket->SetSocket( myIP, 5432 );
|
||||
MySocket->CtrlCOP = CloseWINDOWS;
|
||||
MySocket->CtrlState = CloseWINDOWS;
|
||||
MySocket->Resume();
|
||||
|
||||
// Actualizamos el historial
|
||||
CtrlPPal->TbHistorial -> InsertRecord( ARRAYOFCONST(( NumElemento,
|
||||
(Variant)TDateTime::CurrentDateTime(),
|
||||
(Variant)TiempoRestante(), 0, 999, 0 )) );
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::EnviarListasAppl( void )
|
||||
{
|
||||
/*
|
||||
StatusCode = ERROR; // Estamos en proceso de COMPROBACION / ERROR
|
||||
BlinkCode = IP_QUERY; // --- INTENTANDO COMUNICAR --
|
||||
Blink->Interval = Blinking;
|
||||
*/
|
||||
|
||||
ThreadSocket *MySocket;
|
||||
MySocket = (ThreadSocket *)CtrlPPal->GetThread();
|
||||
MySocket->SetSocket( myIP, 5432 );
|
||||
MySocket->CtrlCOP = sendLIST;
|
||||
MySocket->CtrlState = sendLIST;
|
||||
MySocket->Resume();
|
||||
|
||||
// Actualizamos el historial
|
||||
CtrlPPal->TbHistorial -> InsertRecord( ARRAYOFCONST(( NumElemento,
|
||||
(Variant)TDateTime::CurrentDateTime(),
|
||||
(Variant)TiempoRestante(), 0, 997, 0 )) );
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TElemento::WriteMyName( void )
|
||||
{
|
||||
int W;
|
||||
|
||||
Canvas->Font->Color = clRed;
|
||||
Canvas->Font->Style = Canvas->Font->Style << fsBold;
|
||||
Canvas->Font->Size = 10;
|
||||
W = ( 77 - Canvas->TextWidth( myName ) ) / 2;
|
||||
Canvas->TextOut( W, 64, myName );
|
||||
Canvas->Font->Style = Canvas->Font->Style >> fsBold;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
TDateTime __fastcall TElemento::TiempoRestante(void)
|
||||
{
|
||||
return TiempoPedido + TiempoComienzo - TDateTime::CurrentTime();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
TDateTime __fastcall TElemento::TiempoInicio(void)
|
||||
{
|
||||
return TiempoComienzo;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user