Textdatei drucken!
-
Hallo,
dankefür eure Hilfe. Unten ist mein neuer Code, für alle die mal so was ähnliches machen müsse.
// 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); // Seite auswerfen dcPrint.EndPage(); // 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; }
-
He Supi!
Da grübelt man noch, wie (und ob) man den Beitrag in die Realität überträgt - und da fällt die Lösung vom Himmel.
Dankeschön
PS: Der kommt in meine Sammelmappe mit guten Codeschnipseln.
-
Danke
,
versteh ich als Kompliment!Ade
Walter
-
Hallo zusammen,
in meiner Lösung vom 04 Nov 2003 10:16 war noch einFehler! Habe vergessen
dcPrint.EndPage();
vor
dcPrint.EndDoc();aufzurufen. Unter Windows 2000 halt aber trotzdem alles geklappt, nur unter Windows 98 nicht. Win98 hat garnicht gedruckt.
Habe den Fehler in der Lösung behoben.
Ade
Walter
-
Grüßt euch,
kann mir jemand von euch bitte sagen, wie ich das Bsp zum Laufen bekomme.
Ich habe eine neues Proj. angelegt (MFC,dialogbasierend) und habe eine Funkt die genauso heißt wie im Code angelegt.
Fehler kommen keine keine, aber passieren tu nichts.
Anstatt dem:
if(PrintFile.Open(sDatei, CFile::modeRead,NULL))
hab ich das geschrieben:
if(PrintFile.Open("C:\\TEST.doc", CFile::modeRead,NULL))Weiß das von euch jemand, woran das liegt?
DANKE
-
Hi,
schreib mir mal für welches Betriebssystem Du das machts. Was heißt es passiert nichts?Bis dann
Walter
-
hallo Walter.Wiedmann
der Vater des Threadsfür XP, oder muss ich dein code in die OnOk Funktion reinschreiben?
danke
-
Hi,
also am einfachsten zum Probieren ist es wenn Du den Inhalt der Funktion, also alles innerhalb der äußersten geschweiften Klammern beginnend mitbool bPrintOk = false;
...
...
...
return 0;in der OnOk - Funktion einfügst. Die Funktion muss halt dann int zurückgeben.
Noch eine Frage. Hast Du schon mal mit VC6 programmiert?
Ade
WalterPS: Nicht böse wegen der Frage sein, ist nur gut zu wissen, wie genau mach etwas beschreiben muss. Nicht dass ich hier versuche alles klein klein zu beschreiben und Du denkst dir, hält der mich für blöd!
PPS: Du kannst mich aber auch gerne mal per ICQ kontaktieren, dann kann ich Dir schneller helfen.
-
hi
okay werds morgen mal versuchen...hab ich mir so schon gedacht
Ja, aber bin sozusagen "Anfänger"...
danke
Ich meld mich dann
gruß
-
Ich dachte erst auch da passiert nichts, doch dann habe ich mal in der Datei ein paar Zeilen geschrieben, und bemerkt, das mein Drucker die ränder verschluckt.
Demnach waren die ersten beiden Zeilen und der erste Buchstabe einfach nicht da.Habe es so gelöst!
// 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(50,200,Groesse.cx+50,Groesse.cy*iZeilen+200); // 50 und 200 sind meine verschlukten Ränder
Jetzt ist für mich nurnoch interessant wie ich diesen Dialog umgehe, damit automatisch gedruckt wir.
Sprich: Ich drücke In meiner Anwendung auf DRUCKEN und ohne weitere Nachfrage wird gedruckt.
Wie geht das?