AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Erledigt] TPrinter - Etikettlänge einstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[Erledigt] TPrinter - Etikettlänge einstellen

Offene Frage von "mmvisual"
Ein Thema von mmvisual · begonnen am 12. Aug 2012 · letzter Beitrag vom 13. Aug 2012
Antwort Antwort
mmvisual

Registriert seit: 31. Dez 2006
7 Beiträge
 
#1

[Erledigt] TPrinter - Etikettlänge einstellen

  Alt 12. Aug 2012, 18:32
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

Geändert von mmvisual (13. Aug 2012 um 10:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: TPrinter - Etikettlänge einstellen

  Alt 12. Aug 2012, 21:17
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
mmvisual

Registriert seit: 31. Dez 2006
7 Beiträge
 
#3

AW: TPrinter - Etikettlänge einstellen

  Alt 13. Aug 2012, 00:27
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?

Geändert von mmvisual (13. Aug 2012 um 00:31 Uhr)
  Mit Zitat antworten Zitat
mmvisual

Registriert seit: 31. Dez 2006
7 Beiträge
 
#4

AW: TPrinter - Etikettlänge einstellen

  Alt 13. Aug 2012, 09:57
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz