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> {
<br> HANDLE hPrinter;
<br> DOC_INFO_1 DocInfo;
<br> DWORD dwJob;
<br> DWORD dwBytesWritten;
<br> OpenPrinter( szPrinterName, &hPrinter,
NULL )
<br> DocInfo.pDocName = "My Document";
<br> DocInfo.pOutputFile = NULL;
<br> DocInfo.pDatatype = "RAW";
<br> dwJob = StartDocPrinter( hPrinter, 1, (LPSTR)&DocInfo
)
<br> StartPagePrinter( hPrinter )
<br> // Send the data to the printer.
<br> WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten
)
<br> EndPagePrinter( hPrinter )
<br> EndDocPrinter( hPrinter )
<br> ClosePrinter( hPrinter );
<br> if( dwBytesWritten != dwCount )
<br> return FALSE;
<br> return TRUE;
<br> }
<p>Jetzt wollte ich die Ausdrucke kombinieren. Über Printer()-Canvas
die entsprechenden Grafiken drucken und die internen Barcodes und Schriften
direkt ansprechen. Leider funktioniert dies nicht. Die Variable &dwBytesWritten
meldet zwar, dass 40 Zeichen geschrieben wurden, jedoch gibt die Funktion
WritePrinter false zurück. Der Fehlercode 6 (falscher Handle) wird
zurückgegeben.
<p> Printer()->BeginDoc();
<br> DWORD
dwBytesWritten;
<br> if (!WritePrinter(
Printer()->Handle,Daten.c_str(),Daten.Length(),&dwBytesW ritten )) {
<br> &nbs p; fehler=GetLastError();
<br> &nbs p;   ;
Daten=fehler;
<br> &nbs p;   ;
MessageDlg(Daten,mtError,Btns, 0);
<br> &nbs p; }
<br> Printer()->EndDoc();
<br>
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> {
<br> HANDLE hPrinter;
<br> DOC_INFO_1 DocInfo;
<br> DWORD dwJob;
<br> DWORD dwBytesWritten;
<br> OpenPrinter( szPrinterName, &hPrinter,
NULL )
<br> DocInfo.pDocName = "My Document";
<br> DocInfo.pOutputFile = NULL;
<br> DocInfo.pDatatype = "RAW";
<br> dwJob = StartDocPrinter( hPrinter, 1, (LPSTR)&DocInfo
)
<br> StartPagePrinter( hPrinter )
<br> // Send the data to the printer.
<br> WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten
)
<br> EndPagePrinter( hPrinter )
<br> EndDocPrinter( hPrinter )
<br> ClosePrinter( hPrinter );
<br> if( dwBytesWritten != dwCount )
<br> return FALSE;
<br> return TRUE;
<br> }
<p>Jetzt wollte ich die Ausdrucke kombinieren. Über Printer()-Canvas
die entsprechenden Grafiken drucken und die internen Barcodes und Schriften
direkt ansprechen. Leider funktioniert dies nicht. Die Variable &dwBytesWritten
meldet zwar, dass 40 Zeichen geschrieben wurden, jedoch gibt die Funktion
WritePrinter false zurück. Der Fehlercode 6 (falscher Handle) wird
zurückgegeben.
<p> Printer()->BeginDoc();
<br> DWORD
dwBytesWritten;
<br> if (!WritePrinter(
Printer()->Handle,Daten.c_str(),Daten.Length(),&dwBytesW ritten )) {
<br> &nbs p; fehler=GetLastError();
<br> &nbs p;   ;
Daten=fehler;
<br> &nbs p;   ;
MessageDlg(Daten,mtError,Btns, 0);
<br> &nbs p; }
<br> Printer()->EndDoc();
<br>