C++ [komunikacja z urządzeniami: drukarki i kasy fiskalne]

Wszystko co dotyczy tworzenia i optymalizacji stron internetowych oraz programowania
Miraczek

Użytkownik
Posty: 2
Rejestracja: 03 maja 2017, 20:28

C++ [komunikacja z urządzeniami: drukarki i kasy fiskalne]

Post08 maja 2017, 16:23

Witam,

Czy ktoś z forumowiczów programuje w C++ i ma przećwiczoną komunikację z tego języka z drukarkami i kasami fiskalnymi? Potrzebuję pomocy w starcie w tym temacie. Może znacie jakieś fajne publikacje które pomogły by mi wystartować w takim temacie. Będę wdzięczny za pomoc w starcie do programowania z obsługą kas i drukarek fiskalnych.

Awatar użytkownika
cosik_ktosik

Administrator
Posty: 21399
Rejestracja: 13 lis 2008, 01:17
Lokalizacja: Szczecin
Kontaktowanie:

C++ [komunikacja z urządzeniami: drukarki i kasy fiskalne]

Post08 maja 2017, 22:17

W czystym C++? To już prędzej winapi C, drukowanie jest niczym pisanie na ekran tylko zamiast instancji ekranu jest ta od drukarki.
Przykładowy kawałek kodu dla drukowania z jakiegoś mojego starego programu

Kod: Zaznacz cały

BOOL PopPrntPrintFile (HINSTANCE hInst, HWND hwnd){
     static DOCINFO  di = { sizeof (DOCINFO) };
     static PRINTDLG pd;
     BOOL            bSuccess;
     TCHAR           szJobName [64 + MAX_PATH];
     WORD            iColCopy, iNoiColCopy;
    int             yChar, iCharsPerLine, iLinesPerPage, iTotalLines,
                     iTotalPages, iPage, iLine, iLineNum, wys, szer;
    TEXTMETRIC      tm;
    static HANDLE Object;
    static char iPenStyle;
    static int j, jest, ilosc;
    static int decim, sign;
    static char temptab[255];
    static int strona;
    BOOL ter=TRUE;

     PTSTR           pstrBuffer ;

     pd.lStructSize         = sizeof (PRINTDLG);
     pd.hwndOwner           = hwnd;
     pd.hDevMode            = NULL;
     pd.hDevNames           = NULL;
     pd.hDC                 = NULL;
     pd.Flags               = PD_ALLPAGES | PD_COLLATE | PD_RETURNDC | PD_NOSELECTION;
     pd.nFromPage           = 0;
     pd.nToPage             = 0;
     pd.nMinPage            = 0;
     pd.nMaxPage            = 0;
     pd.nCopies             = 1;
     pd.hInstance           = NULL;
     pd.lCustData           = 0L;
     pd.lpfnPrintHook       = NULL;
     pd.lpfnSetupHook       = NULL;
     pd.lpPrintTemplateName = NULL;
     pd.lpSetupTemplateName = NULL;
     pd.hPrintTemplate      = NULL;
     pd.hSetupTemplate      = NULL;
     
     if (!PrintDlg (&pd))
          return TRUE;
 
    j=0;
    ilosc=il_t2-1;
    iTotalLines=ilosc;
    GetTextMetrics (pd.hDC, &tm);
     yChar = tm.tmHeight + tm.tmExternalLeading; 
     iCharsPerLine = GetDeviceCaps (pd.hDC, HORZRES) / tm.tmAveCharWidth;
     iLinesPerPage = GetDeviceCaps (pd.hDC, VERTRES) / yChar;
    iLinesPerPage-=6;
    iTotalPages = (iTotalLines + iLinesPerPage - 1) / iLinesPerPage ;
    szer=GetDeviceCaps (pd.hDC, HORZRES);
    wys=GetDeviceCaps (pd.hDC, VERTRES);
     EnableWindow (hwnd, FALSE);
     bSuccess   = TRUE;
     bUserAbort = FALSE;
     hDlgPrint = CreateDialog (hInst, TEXT ("PrintDialogBox"), hwnd, PrintDlgProc);
    pstrBuffer = malloc (sizeof (TCHAR) * (iCharsPerLine + 1)) ;
     SetAbortProc (pd.hDC, AbortProc);
     GetWindowText (hwnd, szJobName, sizeof (szJobName));
     di.lpszDocName = szJobName;
    iPenStyle=PS_SOLID;
    Object = SelectObject(pd.hDC, CreatePen(iPenStyle, 3, RGB(0, 0, 0)));
    strona=1;
    j=0;
    jest=0;
   
    /////////
    if (StartDoc (pd.hDC, &di) > 0){
       for (iColCopy = 0 ;iColCopy < ((WORD) pd.Flags & PD_COLLATE ? pd.nCopies : 1) ;iColCopy++){
             i=0; 
          for (iPage = 0 ; iPage < iTotalPages ; iPage++){
                    for (iNoiColCopy = 0 ;iNoiColCopy < (pd.Flags & PD_COLLATE ? 1 : pd.nCopies);iNoiColCopy++){
                              // Start the page
                         if (StartPage (pd.hDC) < 0){
                              bSuccess = FALSE ;
                              break ;
                         }

                              // For each page, print the lines

                         for (iLine = 0 ; iLine < iLinesPerPage ; iLine++){
                              iLineNum = iLinesPerPage * iPage + iLine ;
                              if (iLineNum > iTotalLines)
                                   break ;
                             
                              *(int *) pstrBuffer = iCharsPerLine ;
                             
                              TextOut (pd.hDC, (szer/15), yChar * (iLine+3), text2[iLine],
                                       strlen(text2[iLine]));
                         }
                         
                         if (EndPage (pd.hDC) < 0)
                         {
                              bSuccess = FALSE ;
                              break ;
                         }
                         if (bUserAbort)
                              break ;
                    }
                    if (!bSuccess || bUserAbort)
                         break ;
               }
               if (!bSuccess || bUserAbort)
                    break ;
          }
     }else
          bSuccess = FALSE ;
     if (bSuccess)
          EndDoc (pd.hDC) ;
     if (!bUserAbort){
          EnableWindow (hwnd, TRUE) ;
          DestroyWindow (hDlgPrint) ;
     }
     free (pstrBuffer) ;
     DeleteDC (pd.hDC) ;
     
     return bSuccess && !bUserAbort ;
}
Hotfix
Pozdrawiam, cosik_ktosik :)

Miraczek

Użytkownik
Posty: 2
Rejestracja: 03 maja 2017, 20:28

C++ [komunikacja z urządzeniami: drukarki i kasy fiskalne]

Post10 maja 2017, 19:28

Cześć, chce taki kod do obsługi drukarki spiąć z C++ w Visual Studio aplikacja okienkowa. A dałbyś radę mi to jakoś opisać?
Jak dla kompletnego Laika?

ukwebdes

Użytkownik
Posty: 3
Rejestracja: 03 mar 2017, 12:37

C++ [komunikacja z urządzeniami: drukarki i kasy fiskalne]

Post10 lip 2017, 10:35

Zależy o jakiej marce drukarek mowa. Dla drukarek Posnet można spokojnie napisać własny dll w C#. Łatwiej niż w C++. Mają dosyć dobrą dokumentację.



  • Reklama

Wróć do „Webmastering i programowanie”



Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości