![]() |
[Erledigt] TPrinter - Etikettlänge einstellen
Hallo,
Ich habe einen PTouch QL-560 Etikettendrucker. Der druckt Klebeetikette mit 29 mm Breite, denn das Papier ist gerade so breit. Das Drucken mit Printer.BeginDoc Printer.Canvas.TextOut und Printer.EndDoc usw. klappt auch prima. Das Problem: Die Höhe des Ausdruckes ist immer variable, je nach dem wie viel Text kommen soll. Der Ausdruck mit der PTouch Software kann die Länge des Papierstreifens frei einstellen und es wird nichts verschwendet. Doch wie mache ich das? Mit dem TPrinterDialog wähle ich den Drucker aus, danach schreibe ich alles auf den Printer raus. Wenn nun in Windows unter Geräte&Drucker das Papier des Druckers auf 100mm eingestellt ist, so wird immer diese 100mm genommen. Aber manchmal will ich nur 20mm oder ein anderes mal 400mm drucken. Wie kann ich die Papierlänge frei einstellen? Grüße Markus |
AW: TPrinter - Etikettlänge einstellen
Den eigenen Code habe ich nur im Büro im Zugriff, folgender Link könnte Dir weiterhelfen:
![]() |
AW: TPrinter - Etikettlänge einstellen
Vielen Dank für die Info.
Ich habe nun schon seit einigen Stunden alle möglichen Routinen und Reihenfolgen ausprobiert. Irgendwie klappt das nicht. Hier ein Stück Code, ich denke der sollte klappen:
Delphi-Quellcode:
Ich nutze zwar FPC/Lazarus aber die Windows-Aufrufe sollten dennoch gleich sein.
procedure TWinPrinter.SetPageLength(iLen, iWidth: Integer);
var PDev: TPrinterDevice; DevMode: PDeviceMode; begin if Printers.Count>0 then begin PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]); DocumentProperties(0, FPrinterHandle, pchar(PDev.Name), Pdev.DevMode, Nil, DM_OUT_BUFFER); DevMode := GlobalLock(THandle(Pdev.DevMode)); If (iLen > 0) Or (iWidth > 0) Then Begin DevMode^.dmFields := DevMode^.dmFields Or DM_PAPERSIZE; DevMode^.dmPaperSize := 256; // DMPAPER_USER; end; If iLen > 0 Then Begin DevMode^.dmPaperLength := iLen; DevMode^.dmFields := DevMode^.dmFields Or DM_PAPERLENGTH; End; If iWidth > 0 Then Begin DevMode^.dmPaperWidth := iWidth; DevMode^.dmFields := DevMode^.dmFields Or DM_PAPERWIDTH; end; GlobalUnlock(THandle(Pdev.DevMode)); DocumentProperties(0, FPrinterHandle, pchar(PDev.Name), Pdev.DevMode, Pdev.DevMode, DM_OUT_BUFFER or DM_IN_BUFFER); end; end; Wenn ich DocumentProperties() mit "DM_IN_PROMPT" aufrufe, so erscheint auch der P-Touch Duckerdialog mit meinen geänderten Werten, dennoch druckt er nicht so wie eingestellt. :( Hat noch jemand einen Tipp für mich was ich ändern könnte? |
AW: TPrinter - Etikettlänge einstellen
Ich habe es raus gefunden, ich muss den DC des Druckers löschen:
TWinPrinter(Printer).Handle := 0; Danach übernimmt der meine Einstellung: PDev := TPrinterDevice(Printer.Printers.Objects[Printer.PrinterIndex]); PDev.DevMode^.dmPaperLength := i2; PDev.DevMode^.dmPaperSize := 256; // = DMPAPER_USER; PDev.DevMode^.dmFields := PDev.DevMode^.dmFields or 6; // = DM_PAPERLENGTH 4 | DM_PAPERSIZE 2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz