Beim Druck wird fälschlicherweise eine leere Seite eingefügt
-
Hallo!
Ich drucke mit nachfolgendem Code den Inhalt einer Stringlist aus. Das funktioniert auch wunderbar, nur nach dem die erste Seite voll ist wird eine leere Seite eingefügt. In dieser steht dann gar nichts, auf der nächsten Seite passt es dann wieder. Ich habe keine Ahnung was hier schief läuft.
Hier mein Code:
void druck(); { int x; static int lineHoehe, lineCount, lineSeite, lineBlock; // Printer Setup Dialog aufrufen if (!PrinterSetupDialog1->Execute()) return; // Höhe einer Zeile berechnen lineHoehe = abs(MulDiv(Printer()->Canvas->Font->Size, GetDeviceCaps(Printer()->Handle, LOGPIXELSY), 72)); lineHoehe *= 1.4; lineSeite = (Printer()->PageHeight / lineHoehe) - 4; lineBlock = 340; // Startzeile zum drucken festlegen lineCount = 10; // Name für Druckjob festlegen Printer()->Title = "Streifen"; // Drucken beginnen Printer()->BeginDoc(); // Font festlegen Printer()->Canvas->Font->Name = "Arial"; Printer()->Canvas->Font->Size = 10, 5; // In Position x-Achse 330 eine Überschrift mit Datum, Uhrzeit und Filialname Printer()->Canvas->TextOut(330, 5 * lineHoehe, "Kassierung " + sDateinameDatum + " " + sDateinameUhrzeit + ", Filiale " + sDateinameFiliale); // Alle Zeilen von Memo auf x-Achse 200 ausgeben for (x = 0; x < slStreifenDruck->Count; x++) { if (slStreifenDruck->Strings[x].Pos("ZULASSUNGS") == 1) { sZulassungsnummer = slStreifenDruck->Strings[x].SubString(16, 9); } if (slStreifenDruck->Strings[x].Pos("BAUART") == 1) { sBauart = slStreifenDruck->Strings[x].SubString(9, 16); if (sBauart.Pos("ADP")) { sBauart = "POWER GAMES I"; } Printer()->Canvas->Font->Name = "Arial"; Printer()->Canvas->Font->Size = 6; if (Printer()->PageNumber == 1) { Printer()->Canvas->TextOut(335, 8 * lineHoehe, "Gerät " + sBauart + ", Zulassungsnummer " + sZulassungsnummer); } if (Printer()->PageNumber > 1) { Printer()->Canvas->TextOut(335, 5 * lineHoehe, "Gerät " + sBauart + ", Zulassungsnummer " + sZulassungsnummer); } } // Font festlegen Printer()->Canvas->Font->Name = "Courier"; Printer()->Canvas->Font->Size = 7; Printer()->Canvas->TextOut(lineBlock, lineCount * lineHoehe, slStreifenDruck->Strings[x]); lineCount++; if (Printer()->PageNumber == 1) { // Neuer Block falls Block 1 voll ist if (lineCount >= lineSeite) { lineCount = 10; lineBlock += 1110; } if (slStreifenDruck->Strings[x].Pos("ENDE NC")) { Printer()->NewPage(); lineCount = 10; lineBlock = 340; } if (lineBlock > 3670) { Printer()->NewPage(); lineCount = 7; lineBlock = 340; } } if (Printer()->PageNumber > 1) { // Neuer Block falls Block 1 voll ist if (lineCount >= lineSeite) { lineCount = 7; lineBlock += 1110; } if (slStreifenDruck->Strings[x].Pos("ENDE NC")) { Printer()->NewPage(); lineCount = 7; lineBlock = 340; } if (lineBlock > 3670) { Printer()->NewPage(); lineCount = 7; lineBlock = 340; } } } // Drucken Ende Printer()->EndDoc(); }
Für Hilfe bin ich wie immer danbkbar.
Gruss
Maik
-
Es wird wohl eine Diskrepanz zwischen der Grösse deiner Druckseite und dem Druckbereich des Druckers bestehen.
Vielleicht solltest du z.B. die Zeilenhöhe erst nach dem Setzen des Fonts berechnen?