![]() |
Drucken im Netzwerk
Hallo,
ich habe ein kleines Problem und hoffe das mir jemand helfen kann. Ich will auf einem Drucker im Netzwerk drucken. Ich habe es bereits mit dem Indy-Client IDLPR von Delphi 7 versucht jedoch bekomme ich immer beim IDLPR.connect einen Fehler 'Soket Fehler # 10061 Verbindung abgelehnt' Kann mir bitte jemand sagen was ich falsch gemacht habe? Schon mal danke im Vorraus! mfg HAWK |
Re: Drucken im Netzwerk
Wird der Netzwerkdrucker überhaupt in einem Print-Dialog angezeigt (z.B. auch in Word) ? Sind die Freigaben richtig ? Hat der eingeloggte User überhaupt das Recht auf den Drucker zu drucken ? Viele Fragen. 8)
|
Re: Drucken im Netzwerk
Hi!
Wie sieht denn dein Code bisher aus? Ciao Frederic |
Re: Drucken im Netzwerk
Es kann nur über einen Drucker gedruckt werden der auch eingerichtet ist, zumindest hab ich es noch nicht anders gesehen, dann steht aber auch der Drucker im Pintdialog von Word, etc.
Gruß DelphiFreund |
Re: Drucken im Netzwerk
Ja der Drucker ist im Printdialog mit auf geführt
Reicht es denn nicht dass ich mit IDLPR.Host:='IP-Adresse' den Host angebe und mit IDLPR.connect schon mal ein Verbindung bekomme? |
Re: Drucken im Netzwerk
LPR hat rein gar nichts mit Windows Freigaben (=SMB) zu tun. LPR ist ein auf TCP/IP basierendes Protokoll zur Druckersteuerung unter UNIX.
Wenn der entsprechende Netzwerkdrucker (=Drucker mit Printserver) kein LPR Protokoll unterstützt kannst Du mit Indy auch nicht darauf drucken. Ein Drucker an einem anderen Windows Rechner wird in der Regel nicht über LPR ansprechbar sein. Bei LPR musst Du neben der IP-Adresse auch den Namen der Druckqueue auf dem Printserver angeben, bei HP JetDirect Interfaces z.b. raw1. Gruß, Marcel |
Re: Drucken im Netzwerk
hmm danke!
Gubts es denn noch ne andere Möglichkeit einen NW-Drucker anzusteuern? mfg |
Re: Drucken im Netzwerk
Zitat:
![]() Gruß Stephan :dance: :xmas: |
Re: Drucken im Netzwerk
Wie ist denn Dein Drucker an das Netzwerk angeschlossen ? Davon hängt es natürlich ab wie Du auf diesen Drucken kannst. Das einfachste wäre ein entsprechender Print Server...
Gruß, Marcel |
Re: Drucken im Netzwerk
der Drucker ist einfach im netzwerk an nem hub dran und hat ne eigene IP.
Wäre es denn auch möglich zb
Code:
?
var Schnittestelle:text;
... AssignFile(Schnittstelle,'IP-Adresse') ... Weil mit normal LPT1 kann man ja auch drucken. Nur kann man hier auch ne IP angeben? |
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 07:53 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