Announcement

Collapse
No announcement yet.

Ausdruck auf einen Drucker

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ausdruck auf einen Drucker

    Ich habe ein Etikettenprogramm geschrieben. Die Ausdrucke usw. sind auch in Ordnung. Es sollen auch Barcodes ausgedruckt werden. Bestimmte Drucker unterstützen interne Barcodes und auch Fonts. Diese möchte
    ich direkt ansprechen. Eine Möglichkeit habe ich auch mit folgendem
    Code gefunden. Die Zeichen kommen ungefiltert zum Drucker.
    <p>bool __fastcall TForm1::RawDataToPrinter(LPSTR szPrinterName, LPBYTE
    lpData, DWORD dwCount)
    <br>&nbsp;&nbsp; {
    <br>&nbsp;&nbsp;&nbsp;&nbsp; HANDLE&nbsp;&nbsp;&nbsp;&nbsp; hPrinter;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DOC_INFO_1 DocInfo;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwJob;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwBytesWritten;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; OpenPrinter( szPrinterName, &amp;hPrinter,
    NULL )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DocInfo.pDocName&nbsp;&nbsp;&nbsp; = "My Document";
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DocInfo.pOutputFile = NULL;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; DocInfo.pDatatype&nbsp;&nbsp; = "RAW";
    <br>&nbsp;&nbsp;&nbsp;&nbsp; dwJob = StartDocPrinter( hPrinter, 1, (LPSTR)&amp;DocInfo
    )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; StartPagePrinter( hPrinter )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; // Send the data to the printer.
    <br>&nbsp;&nbsp;&nbsp;&nbsp; WritePrinter( hPrinter, lpData, dwCount, &amp;dwBytesWritten
    )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; EndPagePrinter( hPrinter )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; EndDocPrinter( hPrinter )
    <br>&nbsp;&nbsp;&nbsp;&nbsp; ClosePrinter( hPrinter );
    <br>&nbsp;&nbsp;&nbsp;&nbsp; if( dwBytesWritten != dwCount )
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;
    <br>&nbsp;&nbsp;&nbsp;&nbsp; return TRUE;
    <br>&nbsp;&nbsp; }
    <p>Jetzt wollte ich die Ausdrucke kombinieren. &Uuml;ber Printer()-Canvas
    die entsprechenden Grafiken drucken und die internen Barcodes und Schriften
    direkt ansprechen. Leider funktioniert dies nicht. Die Variable &amp;dwBytesWritten
    meldet zwar, dass 40 Zeichen geschrieben wurden, jedoch gibt die Funktion
    WritePrinter false zur&uuml;ck. Der Fehlercode 6 (falscher Handle) wird
    zur&uuml;ckgegeben.
    <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Printer()->BeginDoc();
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    dwBytesWritten;
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!WritePrinter(&nbsp;
    Printer()->Handle,Daten.c_str(),Daten.Length(),&amp;dwBytesW ritten )) {
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p; fehler=GetLastError();
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;
    Daten=fehler;
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;
    MessageDlg(Daten,mtError,Btns, 0);
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p; }
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Printer()->EndDoc();
    <br>&nbsp;
Working...
X