![]() |
Re: Drucken im Netzwerk
ich habs jetzt mal wie gesagt mit printer versucht
Code:
Das Problem ist nur, dass mir die zwei texte nebeneinander ausgedruckt werden und nicht, wie ich es eigentlich will, untereinander...
printer.PrinterIndex:=-1;
printer.BeginDoc; printer.Canvas.TextOut(0,0, 'test1' ); printer.Canvas.TextOut(0,0, 'test2' ); printer.EndDoc; Gibt es da noch nen Befehl wie ln oder sowas? |
Re: Drucken im Netzwerk
hat denn nicht noch jemand ne idee?
mfg HAWK |
Re: Drucken im Netzwerk
Code:
So ich habe es jetzt mal auf diese weise probiert und funktioniert.
var lst1:textfile;
begin AssignPRN(LST1); Rewrite( LST1); WriteLn( LST1, '; Chargen.FMT' ); WriteLn( LST1, 'M l LBL;CHARGEN' ); WriteLn( LST1, 'R VA;',sArtikelnummer ); WriteLn( LST1, 'R VAB;',sABEZ ); WriteLn( LST1, 'R VWE;',sWENR ); WriteLn( LST1, 'R TWE;WE - Nummer' ); WriteLn( LST1, 'R TH;CHARGEN - ETIKETT' ); WriteLn( LST1, 'R TA;Artikelnummer' ); WriteLn( LST1, 'R TAB;Artikelbez.' ); WriteLn( LST1, 'R BWE;',sWENR ); WriteLn( LST1, 'R BA;',sSAP ); WriteLn( LST1, 'A',sMenge ); System.CloseFile(LST1); end; Das Problem ist nur ich habe ein Etikettendrucker und diese Befehler sind Druckerspezifisch. Der Drucker druckt mir das allerdings genauso aus wie es da steht. Er sollte aber diese Befehle umsetzen können. Hat da vielleicht jemand ne ahnung ob man da noch was einstellen kann, dass der drucker das als befehl interpretiert und nicht als normalen text? Bei dem code würde es funktionieren nur das ist dann kein nw-drucker sondern die parallele schnittstelle...
Code:
Danke schon mal im Vorraus!
var lst1:text;
begin AssignFile(LST1,'LPT1'); Rewrite( LST1); WriteLn( LST1, '; Chargen.FMT' ); WriteLn( LST1, 'M l LBL;CHARGEN' ); WriteLn( LST1, 'R VA;',sArtikelnummer ); WriteLn( LST1, 'R VAB;',sABEZ ); WriteLn( LST1, 'R VWE;',sWENR ); WriteLn( LST1, 'R TWE;WE - Nummer' ); WriteLn( LST1, 'R TH;CHARGEN - ETIKETT' ); WriteLn( LST1, 'R TA;Artikelnummer' ); WriteLn( LST1, 'R TAB;Artikelbez.' ); WriteLn( LST1, 'R BWE;',sWENR ); WriteLn( LST1, 'R BA;',sSAP ); WriteLn( LST1, 'A',sMenge ); CloseFile(LST1); end; mfg HAWK |
Re: Drucken im Netzwerk
Zitat:
die ersten beiden Parameter von TCanvas.TextOut geben den Anfangspunkt an. Wenn Du 2 Text an die gleiche Stelle schreibst, können sie wohl nicht untereinander sein :zwinker: Über TCanvas.TextHeight erhälst Du die Zeilenhöhe des Textes, den Du ausgeben möchtest. Mit dieser Information kannst Du die Y-Position der nächsten Zeile bestimmen. Hier mal ein kleines Beispiel:
Delphi-Quellcode:
PS: Warum einfach wenns auch umständlich geht :zwinker: :mrgreen:
VAR
SL : Tstringlist; i,dy : integer; BEGIN Printer.BeginDoc; SL := TStringList.Create; sl.Add('Test 1'); sl.Add('Test 2'); sl.Add('Test 3'); dy := round(Printer.Canvas.TextHeight(SL[0])*1.2); // Texthöhe + Zwischenraum FOR i:=0 TO SL.Count -1 DO BEGIN Printer.Canvas.TextOut(50, // X: Linker Rand i*dy, // Y: Zeile*Zeilenhöhe SL[i]); // Text END; FreeAndNil(SL); Printer.EndDoc; END; Gruß Stephan :dance: :xmas: |
Re: Drucken im Netzwerk
ja mein problem ist nur dass der drucker das auch als kommando versteht und nicht einfach das kommando schreibt (siehe letzte beitrag von mir)
mfg HAWK |
Re: Drucken im Netzwerk
Natürlich wird alles gedruckt, was zwischen '' steht ! Solche Sachen wie TAB sind nicht druckbare Steuerzeichen. Das ist der Name des Zeichens und nicht das Zeichen selber. Die anderen kommen mir aber sehr dubios vor. :shock: Für das Tab mußt du schreiben "chr (9)" und nicht 'TAB' :!: Und natürlich auch nicht "chr (9)" in die '' mit reinschreiben. :lol:
Außerdem fehlen vermutlich einige ESC. Das wäre dann "chr (27)". Ich empfehle dir dringend zuerst einmal mit einer besonderen Eigenschaft des Druckers, z.B. Breitschrift zu experimentieren und nicht gleich mit 10 Druckersequenzen. Sonst wird das nichts. |
Re: Drucken im Netzwerk
Hi,
besser spät als nie.... ;) Beispiel wie man druckt:
Delphi-Quellcode:
Das geht auch problemlos mit Netzwerkdrukkern die einen eigenen Printserver integeriert haben.
unit uFunctions;
interface uses printers, procedure PrintSomething(const aPrinterName:string); implementation procedure PrintSomething(const aPrinterName:string); var idx: integer; begin idx := Printers.Printer.Printers.IndexOf(aPrinterName); if (idx = -1) then begin // Der Printername existiert nicht! MessageBox(0, PChar( 'Printername ' + aPrinterName + ' exisitiert nicht!'#13#10 + 'Diese Printernamen sind möglich:'#13#10 + Printers.Printer.Printers.Text), 'Fehler!', 0); exit; end; Printers.Printer.PrinterIndex := idx; // Printer session öffnen Printers.Printer.BeginDoc(); // Seite 1 Printers.Printer.Canvas.TextOut(50, 50, 'Seite1'); // Seite 2 Printers.Printer.NewPage(); Printers.Printer.Canvas.TextOut(50, 50, 'Seite2'); // Seite 3 Printers.Printer.NewPage(); Printers.Printer.Canvas.TextOut(50, 50, 'Seite3'); // Printer session schliessen Printers.Printer.EndDoc(); end; end. Wichtig ist hierbei Printers.Printer.PrinterIndex := idx;, da die Printers unit einen Fehler enthält und mit *.EndDoc() den DC des Druckers nicht freigiebt. Das führt mit Netzwerkdruckern regelmässig zu Problemen (speziell HP). Wird jedoch Printers.Printer.PrinterIndex := idx; oder auch einfach Printers.Printer.PrinterIndex := Printers.Printer.PrinterIndex; vor *.BeginDoc(); ausgeführt ist das DC Handle freigegeben und alles geht ohne Probleme. Hoffe das hilft euch weiter. Gruss O. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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