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?


Anmelden zum Antworten