TPrinter - Etikettlänge einstellen

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

TPrinter - Etikettlänge einstellen

Beitrag von MmVisual »

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 Lazarus? 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
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TPrinter - Etikettlänge einstellen

Beitrag von MmVisual »

Ich bin jetzt etwas weiter gekommen:

Code: Alles auswählen

Uses OSPrinters, WinUtilPrn
 
Var PDev: TPrinterDevice; 
  PDev := TPrinterDevice(Printer.Printers.Objects[Printer.PrinterIndex]);
  PDev.DevMode^.dmPaperLength := i2;
  PDev.DevMode^.dmFields := PDev.DevMode^.dmFields or 4; // DM_PAPERLENGTH;
  TWinPrinter(Printer).AdvancedProperties;
Meine Länge übernimmt der jetzt und zeigt die in dem speziellen Drucker Dialog auch an.

Aber: Beim Ausdruck wird nach wie vor die falsche Länge ausgegeben. :(

Printer.PaperSize.PaperRect.PhysicalRect.Bottom zeigt die Anzahl der Pixel der Seite und diese sollte nach dem Aufruf doch angepasst sein, bleibt aber gleich.

Hat noch jemand eine Idee was ich noch aktivieren muss?
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TPrinter - Etikettlänge einstellen

Beitrag von MmVisual »

Ich habe es raus gefunden, ich muss den DC des Druckers löschen:

TWinPrinter(Printer).Handle := 0;

Danach übernimmt der meine Einstellung:

Code: Alles auswählen

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
So. Und jetzt das ganze nur noch für Linux. Ich habe das noch nie gemacht, geht es dafür ähnlich :?:
Zuletzt geändert von Lori am Mo 13. Aug 2012, 20:32, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter verwenden.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten