![]() |
TPrinter, Papierformat
Hallo,
ich mache ein ganz einfaches Etikett mit TPrinter und Canvas.Textout. Funktioniert soweit gut. Ich muß allerdings programmseitig noch das Papierformat setzen. Dies ist ein Standardformat, welches ich im PrinterSetupDialog anwählen kann. Offensichtlich gibt es aber keine einfache Möglichkeit das Papierformat zu setzen? Ich hätte erwartet, das ich genau wie ich einen Drucker mittels Printer.Printerindex:=X auch das Papierformat setzen kann : Printer.PaperFormatIndex:=Y, was es aber so scheinbar nicht gibt. PaperWidth und PaperHeight kann ich zwar auslesen, aber nicht setzen. Wie kann ich dem Printer sagen, welches Papierforma er verwenden soll? Danke, Daniel. |
AW: TPrinter, Papierformat
|
AW: TPrinter, Papierformat
a) das kommt auf den drucker an,
b) das wird im Drucker definiert (z.b welches Letterformat auf welchem Din-format gedruckt werden soll) c) der Drucker kann über Escape-Sequencen angesteuert werden. d) Du hast einen Netz-Spooler der sowieso alles besser weiß Such Dir eine der obigen Möglichkeiten aus oder nenne eine weitere. Gruß K-H |
AW: TPrinter, Papierformat
Etiketten und auch Tickets kann man ganz gut mit Fastreport drucken
|
AW: TPrinter, Papierformat
DSCHUCH, wozu willst du das Papierformat setzen? Es ist für den Druckaufbau doch nur wichtig, das Papierformat (des Faches) zu KENNEN. Um zu wissen, ob Du ein oder mehrere Bahnen und ein oder mehrere Etiketten in Folge auf ein Blatt drucken kannst.
Das Papierformat SETZEN geht ansich nur bei Endlosdruckern (Endlos-Leporello oder Rollendruckern), und dort auch nur die Länge der Seite (also welchen Vorschub ein FF erzeugt). Printer.canvas selbst ist prinzipiell endlos in beiden Dimensionen. |
AW: TPrinter, Papierformat
Richtig, es ist ein Rollendrucker. Das Standardformat ist ein anderes, als das wir verwenden. Stellt man im Druckertreiber das Standardformat um, funktioniert es nicht mehr richtig, da scheint ein Ei im Druckertreiber zu sein.
Stelle ich das Format über den PrintSetDialog von Delphi ein, funktioniert es super, ist nach dem Neustart aber wieder weg und muß neu eingegeben werden. Ok, wir werden es mal mit dem Link aus dem 2. Post probieren. ![]() (Ich will kein FR benutzen, einfach nur 3 Zeilen auf ein Etikett, muß ohne eine riesen Komponente gehen, was es auch tut; soll am ende ein Dienst ohne Userinterface werden) Zitat:
|
AW: TPrinter, Papierformat
Zitat:
Ausserdem ist der Ausdruck "Format" vöilig falsch, weil es sich in der Ansteuerung nur um eine Dimension, die Länge handelt, die Breite naturgegeben durch die eingelegte Rolle vorgegeben ist - und die Format-Dimension Breite nur durch Ein- der Mehrbahnigkeit beeinflussbar ist. Nur gibt es bei Rollendruckern überhaupt kein Problem mit dem "Format" sprich der Etikettenlänge: Man druckt einfach die entsprechende Anzahl Zeilen (oder y-Vorschub) bis zum nächsten Etikett (ohne FF) - fertig. Sind die Etiketten allerdings vorgestanzt, muss man die Lichtschranke des Druckers einschalten und dann pro Etikett mit FF drucken. |
AW: TPrinter, Papierformat
Der Drucker hat vorgestanzte Klebeetiketten. Ein Brother QL irgendwas. Das erste Etikett im Druckertreiber ist 62x29. Das 3. Papierformat (PickUp im Delphi PrinterSetupDialog) ist 62x40 (what ever) - und dieses ist eingelegt.
Ich will nur 3 Strings auf ein Etikett. Daher: Printer.PrinterIndex:=MyPrinterIndex; BeginDoc; TextOut...; TextOut...; TextOut...; EndDoc; klappt auch. Ich will dem Drucker nur die Etikettenlänge richtig mitgeben, da er sonst meckert "falsches Format", da das Standardformat im Treiber (also die erste Auswahlmöglichkeit) eine andere ist. Ist das einmal eingestellt, klappt alles: er schneidet automatisch ab, macht den richtigen Vorschub etc. |
AW: TPrinter, Papierformat
Bei vorgestanzten Etiketten wird
a) das Format (incl. Leerraum) im Druckertreiber gesetzt b) muß das gewählte Format auch im Treiber auch als gewünschtes Format gespeichert werden c) muß dort angegeben werden, dass der Treiber das Etikett steuert d) evtl. auch richtig auf Etiketten statt "Endlos" eingestellt werden (wg. der Aktivität der Lichtschranke - aber das scheint ja richtig eingestellt zu sein). Dann wird nach einem Seitenvorschub (Printer.NewPage) und Druckende (Printer.EndDoc) dort ein Seitenvorschub entspr. des im Treiber gesetzten Formates ausgelöst (und nach Jobende ein evtl. Vorschub auf die Abrißkante ausgelöst). Das setzen des Formates in Canvas ist völlig sinnlos und kontraproduktiv - weil, man kann schlecht z.B. A3 in Canvas setzen und der Drucker hat A4 Papier. Printer.Canvas kennt auch gar kein Format - es ist immer in x und y nahezu unendlich. Format per Printer setzen meint immer das Format im Drucker setzen, nicht für die Printer.canvas-Fläche. Wenn Du mehrere Etikettenformate haben willst. also neben dem "Standard"-Format (was immer das auch ist, denn es gibt auch bei Etiketten-Druckern kein "Standard", nur Default nach Treiber-Inst.), dann installier für jedes Format einen Treiber und schreib da jeweils das passende Format als Standard rein. Und Speichern! Alternativ geht nur der RAW-Druck mit der Drucker-Command-Sprache - also Canvas ganz weglassen. |
AW: TPrinter, Papierformat
Nachtrag:
Es kann auch sein, daß der Drucker dem Treiber die Settings incl. eingelegtes Format mitteilt (s. Manual). Dann liegt der Fehler evtl. auch daran, daß die Etiketten im Drucker nicht eingemessen wurden. |
AW: TPrinter, Papierformat
Die Lösung mit dem Treiber haben wir bisher auch immer so genutzt. Problem ist, der Treiber hat ne macke. Speichere ich dort ein anderes als das Werkseitig voreingestellte Format als Standard, druckt er alles 2 mal.
Es muß ja auch irgendwie in Delphi gehen, das Format mitzugeben. FastReport macht es ja auch. Ich werde mir mal die Quellen von denen anschauen. |
AW: TPrinter, Papierformat
Der Code aus dem Link von DeddyH funktioniert bei mir nur wenn ich zusätzlich Höhe und Breite mitgebe.
Delphi-Quellcode:
GetPaperInfo ist einem
// lokales Umstellen
var Device, Driver, Port: array[0..80] of Char; DevMode: THandle; pDevmode: PDeviceMode; Papers: TPaperInfos; begin GetPaperInfo(Papers, Printer.PrinterIndex); Printer.GetPrinter(Device, Driver, Port, DevMode); if Devmode <> 0 then begin pDevMode := GlobalLock(Devmode); if pDevmode <> nil then try with pDevmode^ do begin dmPapersize := ListBox1.ItemIndex; dmPaperLength := Papers[ListBox1.ItemIndex].papersize.Y; dmPaperWidth := Papers[ListBox1.ItemIndex].papersize.X; dmFields := dmFields or DM_PAPERSIZE OR DM_PAPERLENGTH OR DM_PAPERWIDTH; end; finally GlobalUnlock(Devmode); end; end; end; ![]() |
AW: TPrinter, Papierformat
Zitat:
Und per Delphi geht es sogar ganz toll - allerdings im RAW-Druck per Commands. Noch eine Anmerkung zu Etiketten-Rollendruckern mit vorgestanzten Etiketten: Normal braucht man das Etikett bei Einlegen einer neuen Rolle nur einmessen, die Lichtschranke macht im Steg dann den Rest. Mißt die Lichtschranke Etiketten-Ende/Neuanfang, ist der Druck eh zu Ende. Die eingelegte Rolle steuert ihr Format selber. Allerdings kann es dabei einen Parameter geben, der das evtl. verhindert: Der %-Wert der Messung von der Etikettenlänge. Ich würde einfach mal ins Handbuch gucken, was da zu Format-Einstellung am Drucker selber steht. |
AW: TPrinter, Papierformat
Ich hab mal den Treiber installiert (Win 7) und ein Format (62x70mm (Beispiel)) gesetzt: Das Format bleibt im Treiber erhalten! Allerdings muß es auch, wie oben schon erwöhnt, auch gespeichert werden.
Per Programm ausgelesene Treiber(Printer)Werte:
Code:
Die gespeicherten Werte bleiben erhalten, bis neue Werte gesetzt werden, auch über einen PC-Start hinaus. Allerdings würde der Aufruf des Druckdialogs diese Werte wieder auf Defaultwerte setzen, wenn dem Druckdialog nicht die gewünschten Werte als Default mitgegeben werden!
Index: 6
Drucker: Brother QL-580N LE Physikalische Seite [mm]: 70 x 62 Papier-Nutzen [mm]: 64 x 59 Papier-Offset [mm]: x = 3 y = 2 Drucker-Fächer: FachNr. 15, Automatisch auswählen, FachNr. 257, Band, DeviceCaps: DRIVERVERSION 1536 TECHNOLOGY 2 Raster printer HORZSIZE 64 h[mm] VERTSIZE 59 b[mm] HORZRES 756 h [Px] (Printer.PageWidth =756) VERTRES 695 b [Px] (Printer.PageHeight =695) LOGPIXELSX 300 b[px/inch] LOGPIXELSY 300 h[px/inch] BITSPIXEL 1 color bits for each pixel PLANES 1 color planes NUMBRUSHES -1 brushes NUMPENS 10 Pens NUMFONTS 0 installierte Fonts NUMCOLORS 2 Color Tables ASPECTX 300 Relative width [Px] ASPECTY 300 Relative height [Px] ASPECTXY 425 Diagonal width [Px] SIZEPALETTE 2 COLORRES 0 PHYSICALWIDTH 827 width of the physical page [device units] PHYSICALHEIGHT 731 height of the physical page [device units] PHYSICALOFFSETX 35 distance from the left edge [device units] PHYSICALOFFSETY 18 distance from the top edge [device units] Die Manuals sind wie üblich unter aller Sau - kaum Informationen, vorallem keine ordentlichen techn. Informationen - aber das scheint eh der Trend zu sein :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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 by Thomas Breitkreuz