//--------------------------------------------------------------------------- #include #include #include #pragma hdrstop #include "imprimirTicket_main.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- #define min(a, b) (((a) < (b)) ? (a) : (b)) __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { step = 0; importeCobrar = 0; importeEntrega = 0; serial_port_connected = false; importeTXT = ""; /* Advance mode */ /* Articulo/s Uds Importe ---------------------------- --- ------- */ sg->Cells[0][0] = "Articulo/s"; sg->Cells[1][0] = "Uds"; sg->Cells[2][0] = "Importe"; /****************/ } //--------------------------------------------------------------------------- void __fastcall TForm1::addToNumber(AnsiString number) { if ( StrPos(importeTXT.c_str(), "," )==0 || number!="," ) importeTXT += number; lcd->Caption = FormatFloat("#,##0.#0",importeTXT.ToDouble()) + " €"; } //--------------------------------------------------------------------------- void __fastcall TForm1::btIntroClick(TObject *Sender) { switch( step ) { case 0: stepLb->Caption = "Entrega:"; step++; lcd->Caption = "0.0 €"; importeCobrar = importeTXT.ToDouble(); importeEntrega = 0; importeTXT=""; break; case 1: stepLb->Caption = "Cambio:"; step++; importeEntrega = importeTXT.ToDouble(); lcd->Caption = FormatFloat("#,##0.#0", (importeEntrega-importeCobrar) )+" €"; break; case 2: default: imprimirTicket(importeCobrar,importeEntrega); stepLb->Caption = "Importe:"; step=0; lcd->Caption = "0.0 €"; importeCobrar = 0; importeTXT=""; break; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button14Click(TObject *Sender) { addToNumber(","); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button13Click(TObject *Sender) { addToNumber("0"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button11Click(TObject *Sender) { addToNumber("3"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button10Click(TObject *Sender) { addToNumber("2"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button9Click(TObject *Sender) { addToNumber("1"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button7Click(TObject *Sender) { addToNumber("6"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { addToNumber("5"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { addToNumber("4"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { addToNumber("9"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { addToNumber("8"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { addToNumber("7"); btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { importeTXT = ""; lcd->Caption = "0,0 €"; btIntro->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::imprimirTicket(float importeCobrar, float importeEntrega) { if ( !serial_port_connected ) { TIniFile *ini; ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\cfg.ini" ); puerto = ini->ReadString( "www.infdj.com", "PUERTO", "COM1" ); ticket_numberSufix = ini->ReadString( "www.infdj.com", "ticket_numberSufix", "€" ); ticket_header = new TStringList; ticket_header->CommaText = ini->ReadString( "www.infdj.com", "ticket_header", "" ); ticket_footer = new TStringList; ticket_footer->CommaText = ini->ReadString( "www.infdj.com", "ticket_footer", "" ); delete ini; serial_connect( puerto.c_str(),CBR_9600,NOPARITY,8,true ); } AbreCajon(); int i; for (i=0;iCount;i++) serial_sendLine( ticket_header->Strings[i] ); serial_sendLine( "Fecha: "+Now() ); serial_sendLine( "" ); serial_sendLine( Format( "Importe: %20s %s",ARRAYOFCONST(( FormatFloat("#,##0.#0", importeEntrega), ticket_numberSufix )) ) ); serial_sendLine( "" ); serial_sendLine( "------------------------------" ); serial_sendLine( Format( "Entrega: %20s %s",ARRAYOFCONST(( FormatFloat("#,##0.#0", importeEntrega), ticket_numberSufix )) ) ); serial_sendLine( Format( "Cambio: %20s %s",ARRAYOFCONST(( FormatFloat("#,##0.#0", (importeEntrega-importeCobrar)), ticket_numberSufix )) ) ); serial_sendLine( "------------------------------" ); for (i=0;iCount;i++) serial_sendLine( ticket_footer->Strings[i] ); } // -------------------------------------------------------------------------- void __fastcall TForm1::AbreCajon() { char b[15]; b[0]=(char)0x1B; b[1]='p'; b[2]=0; b[3]=127; b[4]=127; serial_sendData( b,5 ); } //--------------------------------------------------------------------------- int __fastcall TForm1::serial_sendLine(AnsiString data) { data = "\r\n"+data; return serial_sendData( data.c_str(), data.Length() ); } //--------------------------------------------------------------------------- int __fastcall TForm1::serial_sendData(char *data,int length) { /* int i,dev=-1; for(i=0;dev!=0 && iActivePage == TabSheet2 ) return; switch( Key ) { case '.': addToNumber(","); break; case '0': addToNumber("0"); break; case '1': addToNumber("1"); break; case '2': addToNumber("2"); break; case '3': addToNumber("3"); break; case '4': addToNumber("4"); break; case '5': addToNumber("5"); break; case '6': addToNumber("6"); break; case '7': addToNumber("7"); break; case '8': addToNumber("8"); break; case '9': addToNumber("9"); break; case '+': lcd->Caption = "0.0 €"; importeTXT=""; break; case VK_RETURN: btIntroClick(NULL); break; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if ( serial_port_connected ) { serial_disconnect(); delete ticket_header; delete ticket_footer; } } //--------------------------------------------------------------------------- void __fastcall TForm1::sgKeyPress(TObject *Sender, char &Key) { if ( Key==VK_RETURN ) { sg->Col = (sg->Col + 1)%3; if ( sg->Col == 0 ) sg->Row = min(sg->Row+1,6); } } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { if ( !serial_port_connected ) { TIniFile *ini; ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\TPV.ini" ); puerto = ini->ReadString( "TPV", "puertoImpresoraPOS", "COM1" ); delete ini; serial_connect( puerto.c_str(),CBR_9600,NOPARITY,8,true ); } AbreCajon(); char b[15]; // b[0]=(char)0x1B; b[1]='!'; b[2]=0x01; // Negrita b[0]=(char)0x1B; b[1]='r'; b[2]='0'; serial_sendData( b,3 ); // Color Negro b[0]=(char)0x1B; b[1]='a'; b[2]='0'; serial_sendData( b,3 ); // Alinear IZQUIERDA int i; for (i=0;iLines->Count;i++) serial_sendLine( Memo1->Lines->Strings[i] ); serial_sendLine( " Articulo/s Uds Importe" ); serial_sendLine( "---------------------------- --- -------" ); float importe, importeTotal; importeTotal = 0; for ( i=1; iRowCount; i++ ) { if ( !sg->Cells[0][i].IsEmpty() ) { try { importe = AnsiReplaceStr( sg->Cells[2][i], ".", "," ).ToDouble(); } catch(...) { importe = 0; } serial_sendLine( Format( "%28s %-3s %s",ARRAYOFCONST(( sg->Cells[0][i],sg->Cells[1][i], FormatFloat("#,##0.#0", importe ) )) ) ); importeTotal += importe; } } serial_sendLine( "" ); serial_sendLine( Format( "Importe: %20s %s",ARRAYOFCONST(( FormatFloat("#,##0.#0", importeTotal), ticket_numberSufix )) ) ); for (i=0;iLines->Count;i++) serial_sendLine( Memo2->Lines->Strings[i] ); } //--------------------------------------------------------------------------- void __fastcall TForm1::PageControl1Change(TObject *Sender) { if ( PageControl1->ActivePage == TabSheet2 ) sg->SetFocus(); } //---------------------------------------------------------------------------