//--------------------------------------------------------------------------- #include #include #include #include #pragma hdrstop #include "TPropiedades.h" #include "LEGO_COMM.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "DigitNum" #pragma link "LM2000" #pragma resource "*.dfm" TPropiedades *Propiedades; //--------------------------------------------------------------------------- __fastcall TPropiedades::TPropiedades(TComponent* Owner) : TForm(Owner) { // Recuperar configuracion // Recuperamos la configuración TIniFile *ini; ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); // General ComboBox1->ItemIndex = ini->ReadInteger( "CAP_c", "PuertoLego", 0 ); DireccionesE->Text = ini->ReadString( "CAP_c", "IDsLegoE", "1;" ); DireccionesS->Text = ini->ReadString( "CAP_c", "IDsLegoS", "2;" ); Historial->Checked = ini->ReadBool( "CAP_c", "historial", true ); Capacidad->Text = ini->ReadInteger( "parking", "Capacidad", 1000 ); MsgCapacidad->Text = ini->ReadString( "parking", "MsgParking_lleno", "El parking esta lleno" ); ComboBox2->ItemIndex = ini->ReadInteger( "parking", "DiasDeCortesia", 0 ); DB_host->Text = ini->ReadString( "db", "host", "." ); DB_login->Text = ini->ReadString( "db", "login", "NO_ES_SQL" ); DB_pwd->Text = ini->ReadString( "db", "pwd", "NO_ES_SQL" ); /* Sobrecarga de franjas horarias */ CheckBox1->Checked = ini->ReadBool( "horas", "sobrecargar", false ); verL->Checked = ini->ReadBool( "horas", "verL", false ); desdeL->Text = ini->ReadString( "horas", "desdeL", "00:00" ); hastaL->Text = ini->ReadString( "horas", "hastaL", "00:00" ); verM->Checked = ini->ReadBool( "horas", "verM", false ); desdeM->Text = ini->ReadString( "horas", "desdeM", "00:00" ); hastaM->Text = ini->ReadString( "horas", "hastaM", "00:00" ); verX->Checked = ini->ReadBool( "horas", "verX", false ); desdeX->Text = ini->ReadString( "horas", "desdeX", "00:00" ); hastaX->Text = ini->ReadString( "horas", "hastaX", "00:00" ); verJ->Checked = ini->ReadBool( "horas", "verJ", false ); desdeJ->Text = ini->ReadString( "horas", "desdeJ", "00:00" ); hastaJ->Text = ini->ReadString( "horas", "hastaJ", "00:00" ); verV->Checked = ini->ReadBool( "horas", "verV", false ); desdeV->Text = ini->ReadString( "horas", "desdeV", "00:00" ); hastaV->Text = ini->ReadString( "horas", "hastaV", "00:00" ); verS->Checked = ini->ReadBool( "horas", "verS", false ); desdeS->Text = ini->ReadString( "horas", "desdeS", "00:00" ); hastaS->Text = ini->ReadString( "horas", "hastaS", "00:00" ); verD->Checked = ini->ReadBool( "horas", "verD", false ); desdeD->Text = ini->ReadString( "horas", "desdeD", "00:00" ); hastaD->Text = ini->ReadString( "horas", "hastaD", "00:00" ); delete ini; StartEventRecorder("Historial.log"); // Hacer efectivos los cambios bAplicarClick(0); LEGO_COMM = new CheckLEGOs(true); LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); LEGO_COMM -> SetDiasCortesia( ComboBox2->ItemIndex ); LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); try { LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); }catch(...){ LEGO_COMM -> maxDENTRO = 2000; } LEGO_COMM -> Resume(); } //--------------------------------------------------------------------------- void __fastcall TPropiedades::StartEventRecorder(AnsiString opLOG) { try { // Cargamos todos los eventos anteriores mHistorial->Lines->LoadFromFile( opLOG ); // Si hay demasiados registros if ( mHistorial->Lines->Count > 700 ) { for ( int i=0; i<100; i++ ) // Eliminamos las 100 últimas entradas mHistorial->Lines->Delete( 3 ); } } catch(...) { mHistorial->Lines->Clear(); // En caso de error, las eliminamos todas } //Fecha y hora del inicio de sesión mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Inicio de la sesión" ); } //--------------------------------------------------------------------------- void __fastcall TPropiedades::BorrarHistorialClick(TObject *Sender) { mHistorial -> Lines -> Clear(); } //--------------------------------------------------------------------------- void __fastcall TPropiedades::FormDestroy(TObject *Sender) { if ( Historial -> Checked ) { mHistorial -> Lines -> Insert( 0, TDateTime::CurrentDateTime().DateTimeString() + " :: Fin de sesión "); mHistorial -> Lines -> SaveToFile( "Historial.log" ); } /* // Desactivamos el HILO de ejecución y esperamos hasta que acabe LEGO_COMM->Terminate(); LEGO_COMM->WaitFor(); */ delete IDe; delete IDs; } //--------------------------------------------------------------------------- void __fastcall TPropiedades::mHistorialChange(TObject *Sender) { /* try { if ( Historial -> Checked ) mHistorial -> Lines -> SaveToFile("Historial.log"); } catch(...) { // do nothing } */ } //--------------------------------------------------------------------------- void __fastcall TPropiedades::ActivarAplicar(TObject *Sender) { if ( ! bDesBlock->Visible ) { bAplicar->Enabled = true; } } //--------------------------------------------------------------------------- void __fastcall TPropiedades::bDesBlockClick(TObject *Sender) { ComboBox2->Enabled = true; ComboBox1->Enabled = true; DireccionesE->Enabled = true; DireccionesS->Enabled = true; Capacidad->Enabled = true; MsgCapacidad->Enabled = true; DB_host->Enabled = true; DB_login->Enabled = true; DB_pwd->Enabled = true; bDesBlock->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TPropiedades::bAplicarClick(TObject *Sender) { if ( Sender ) { // Guardamos los cambios... TIniFile *ini; ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); // General ini->WriteInteger( "CAP_c", "PuertoLego", ComboBox1->ItemIndex ); ini->WriteString( "CAP_c", "IDsLegoE", DireccionesE->Text ); ini->WriteString( "CAP_c", "IDsLegoS", DireccionesS->Text ); ini->WriteBool( "CAP_c", "historial", Historial->Checked ); try { ini->WriteInteger( "parking", "Capacidad", Capacidad->Text.ToInt() ); } catch(...) { ini->WriteInteger( "parking", "Capacidad", 1000 ); } ini->WriteString( "parking", "MsgParking_lleno", MsgCapacidad->Text ); ini->ReadInteger( "parking", "DiasDeCortesia", ComboBox2->ItemIndex ); ini->WriteString( "db", "host", DB_host->Text ); ini->WriteString( "db", "login", DB_login->Text ); ini->WriteString( "db", "pwd", DB_pwd->Text ); /* Sobrecarga de franjas horarias */ ini->WriteBool( "horas", "sobrecargar", CheckBox1->Checked ); ini->WriteBool( "horas", "verL", verL->Checked ); ini->WriteString( "horas", "desdeL", desdeL->Text ); ini->WriteString( "horas", "hastaL", hastaL->Text ); ini->WriteBool( "horas", "verM", verM->Checked ); ini->WriteString( "horas", "desdeM", desdeX->Text ); ini->WriteString( "horas", "hastaM", hastaX->Text ); ini->WriteBool( "horas", "verX", verX->Checked ); ini->WriteString( "horas", "desdeX", desdeX->Text ); ini->WriteString( "horas", "hastaX", hastaX->Text ); ini->WriteBool( "horas", "verJ", verJ->Checked ); ini->WriteString( "horas", "desdeJ", desdeJ->Text ); ini->WriteString( "horas", "hastaJ", hastaJ->Text ); ini->WriteBool( "horas", "verV", verV->Checked ); ini->WriteString( "horas", "desdeV", desdeV->Text ); ini->WriteString( "horas", "hastaV", hastaV->Text ); ini->WriteBool( "horas", "verS", verS->Checked ); ini->WriteString( "horas", "desdeS", desdeS->Text ); ini->WriteString( "horas", "hastaS", hastaS->Text ); ini->WriteBool( "horas", "verD", verD->Checked ); ini->WriteString( "horas", "desdeD", desdeD->Text ); ini->WriteString( "horas", "hastaD", hastaD->Text ); if ( LEGO_COMM ) { LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); LEGO_COMM -> SetDiasCortesia( ComboBox2->ItemIndex ); try { LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); }catch(...){ LEGO_COMM -> maxDENTRO = 2000; } } ini->UpdateFile(); delete ini; } // Hacemos efectivos los cambios... ObtenDirLEGOS( DireccionesE->Text, nLEGOSe, &IDe ); ObtenDirLEGOS( DireccionesS->Text, nLEGOSs, &IDs ); if ( LEGO_COMM ) { LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); } ////////// HAY QUE FINALIZAR EL HILO Y COMENZAR CON OTRO NUEVO bDesBlock->Visible = true; ComboBox2->Enabled = false; ComboBox1->Enabled = false; DireccionesE->Enabled = false; DireccionesS->Enabled = false; Capacidad->Enabled = false; MsgCapacidad->Enabled = false; DB_host->Enabled = false; DB_login->Enabled = false; DB_pwd->Enabled = false; bAplicar->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TPropiedades::ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID) { char *pDir, buff[80], *pbuff; nLEGOS = 0; int i = 1, j=0; while ( i <= cadena.Length() ) { if ( cadena[i] == ';' ) nLEGOS++; i++; } (*ID) = new int[nLEGOS]; i = 1; pbuff = buff; while ( i <= cadena.Length() ) { if ( cadena[i] == ';' ) { *pbuff = '\0'; try { (*ID)[j++] = AnsiString( buff ).ToInt(); } catch(...) { nLEGOS--; ShowMessage( "La configuración de direcciones LEGO'S es incorrecta" ); } pbuff = buff; i++; }else{ *(pbuff++) = cadena[i]; i++; } } } //--------------------------------------------------------------------------- bool __fastcall TPropiedades::entreHora(AnsiString hLo, AnsiString hHi) { bool dev = false; try { TDateTime hora; hora = EncodeTime( (hLo.SubString(1,2)).ToInt(), (hLo.SubString(4,2)).ToInt(), 0, 0 ); if ( TDateTime::CurrentTime() >= hora ) { hora = EncodeTime( (hHi.SubString(1,2)).ToInt(), (hHi.SubString(4,2)).ToInt(), 0, 0 ); dev = ( TDateTime::CurrentTime() <= hora ); } } catch (...) { return false; } return dev; } //--------------------------------------------------------------------------- bool __fastcall TPropiedades::CheckHorario(void) { bool dev = false; if ( CheckBox1->Checked ) { switch ( TDateTime::CurrentDate().DayOfWeek() ) { // Domingo case 1: if ( verD->Checked ) dev = entreHora( desdeD->Text, hastaD->Text ); break; // Lunes case 2: if ( verL->Checked ) dev = entreHora( desdeL->Text, hastaL->Text ); break; // Martes case 3: if ( verM->Checked ) dev = entreHora( desdeM->Text, hastaM->Text ); break; // Miercoles case 4: if ( verX->Checked ) dev = entreHora( desdeX->Text, hastaX->Text ); break; // Jueves case 5: if ( verJ->Checked ) dev = entreHora( desdeJ->Text, hastaJ->Text ); break; // Viernes case 6: if ( verV->Checked ) dev = entreHora( desdeV->Text, hastaV->Text ); break; // Sabado case 7: if ( verS->Checked ) dev = entreHora( desdeS->Text, hastaS->Text ); break; } } return dev; } void __fastcall TPropiedades::Timer1Timer(TObject *Sender) { static bool horaVista = false, firstTime = true, cH; bool nH; nH = CheckHorario(); if ( firstTime ) { horaVista=false; firstTime = false; cH = nH; } if ( cH != nH ) { horaVista = false; cH = nH; } if ( !horaVista && cH ) // Si no hemos visto este cambio { horaVista = true; sndPlaySound("snd\\fuera_de_hora.wav", SND_ASYNC | SND_FILENAME); LEGO_COMM -> RetiraPermisoSalida(); } } //--------------------------------------------------------------------------- void __fastcall TPropiedades::Label1DblClick(TObject *Sender) { AnsiString cantidad; // Cambio del aforo if ( InputQuery( "Forzar lleno de aforo", "Nuevo aforo:" , cantidad ) ) { try { Ocupacion->Value = cantidad.ToInt(); LEGO_COMM -> crdDENTRO = Ocupacion->Value; } catch(...){ //nothing } } } //---------------------------------------------------------------------------