Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Erledigt] TPrinter - Etikettlänge einstellen (https://www.delphipraxis.net/169796-%5Berledigt%5D-tprinter-etikettlaenge-einstellen.html)

mmvisual 12. Aug 2012 17:32


[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

Bummi 12. Aug 2012 20:17

AW: TPrinter - Etikettlänge einstellen
 
Den eigenen Code habe ich nur im Büro im Zugriff, folgender Link könnte Dir weiterhelfen:

http://www.esanu.name/delphi/Hardwar...int%20job.html

mmvisual 12. Aug 2012 23:27

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:
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;
Ich nutze zwar FPC/Lazarus aber die Windows-Aufrufe sollten dennoch gleich sein.

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?

mmvisual 13. Aug 2012 08:57

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