Unterschiede zwischen Windows 2000 und Windows 98 beim Drucken!!
-
Hallo,
ich habe die untere Funktion, die ein Reportfile (reine Textdatei) auf einem Drucker ausgibt. Das Ganze funktioniert auch problemlos unter Windows 2000. Aber unter Windows 98 funktioniert es nicht
. Wenn ich unter Windows 98 den Druckauftrag in eine Datei schreiben lasse, erhalte ich immer eine Datei mit der Grösse von 0 Bytes.Hat jemand eine Idee, was unter Windows 98 geändert werden sollte, damit die Funktion wieder funktioniert. Der Drucker unter Windows 98 funkioniert, weil ich die Reportdatei mit einem normalen Editor problemlos drucken kann.
// Drucken des Reportfiles // Parameter: // CString sDatei = Dateiname + Path der zu druckenden Reportdatei // Rückgabewerte: // 0 = Fehler frei // 1 = Fehler aufgetretten // 2 = Benutzerabbruch int Test::PrintReportFile(CString sDatei) { bool bPrintOk = false; int iZeilen = 0; int iMaxLength = 0; CString sPrintFile = ""; CString sMaxLength = ""; //Datei öffnen CStdioFile PrintFile; do { if(PrintFile.Open(sDatei, CFile::modeRead,NULL)) { CString sTemp; //Zeile einlesen while(PrintFile.ReadString(sTemp)) { //Anzahl der Zeichen in länster Zeile ermitteln if(iMaxLength < sTemp.GetLength()) { iMaxLength = sTemp.GetLength(); sMaxLength = sTemp; } //Anzahl der Zeilen ermitteln iZeilen++; //String anhängen sPrintFile = sPrintFile + sTemp + "\n"; } // Ein CPrintDialog-Object konstruieren CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); if (dlgPrint.DoModal()==IDOK) { //Den Drucker-DC vom Dialogfeld mit einem CDC-Objekt verbinden CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); // Eine DOCINFO-Struktur erzeugen und füllen DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "MeinDruckAuftrag"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; // Ausdruck des Dokuments starten if(dcPrint.StartDoc(&myPrintJob) >= 0) { //Eine Seite beginnen dcPrint.StartPage(); //Platzbedarf der längsten Zeile ermitteln CSize Groesse = dcPrint.GetTextExtent(sMaxLength); //Rechteck erstellen //Maximale Zeilenlänge steht in Groesse.cx //Maximale Dokumentlänge ist Groesse einer Zeile mal //Anzahl der Zeilen (Groesse.cy*iZeilen) CRect SeiteGroesse(0,0,Groesse.cx,Groesse.cy*iZeilen); // Zeichnen beginnen dcPrint.DrawText(sPrintFile,SeiteGroesse,DT_EXPANDTABS); // Dokument schließen dcPrint.EndDoc(); // Drucken erfolgreich!! bPrintOk = true; } else { if(MessageBox("Fehler beim drucken des Reports!\r\n" "Nochmal versuchen?","DRUCKFEHlER", MB_ICONERROR | MB_YESNO) == IDNO) { //Funktion mit Fehler beenden return 1; } } //Druckergerätekontext löschen dcPrint.DeleteDC(); } else { //Benutzer hat abgebrochen return 2; } } else { if(MessageBox("Fehler beim öffnen des Reports zum Drucken!\r\n" "Nochmal versuchen?","DRUCKFEHlER", MB_ICONERROR | MB_YESNO) == IDNO) { //Funktion mit Fehler beenden return 1; } } }while(bPrintOk == false); return 0; }Danke
Walter
-
Hallo,
ich habe das Problem gefunden!Im Codeabschnitt
// Zeichnen beginnen dcPrint.DrawText(sPrintFile,SeiteGroesse,DT_EXPANDTABS); // Dokument schließen dcPrint.EndDoc();Fehlt die Zeile dcPrint.PageEnd(); die vor dcPrint.EndDoc(); gehört.
Code sollte als folgendermassen aussehen:
// Zeichnen beginnen dcPrint.DrawText(sPrintFile,SeiteGroesse,DT_EXPANDTABS); // Seite auswerfen dcPrint.EndPage(); // Dokument schließen dcPrint.EndDoc();Ade
Walter