Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzwerkdrucker druckt nicht (https://www.delphipraxis.net/30579-netzwerkdrucker-druckt-nicht.html)

Hansa 26. Sep 2004 17:44


Netzwerkdrucker druckt nicht
 
Ich habe hier folgenden Code :


Delphi-Quellcode:
var d : Text;

PROCEDURE DruckLn (st : string);
  BEGIN
    writeln (d,st);
  END;

procedure TForm1.FormShow(Sender: TObject);
begin
showmessage ('ÄÄÄÄ');
  assignfile (d,'LPT1:');
  rewrite (d);
  druckln ('kjljljll');
  closefile (d);
end;
Der Drucker, der an der Workstation dran ist druckt von da aus. Von einem anderen Rechner, bei dem der Netzwerkdrucker als Standarddrucker eingerichtet ist, wird nicht gedruckt.

Hansa 27. Sep 2004 20:46

Re: Netzwerkdrucker druckt nicht
 
Muß da mal endlich weiterkommen.

Delphi-Quellcode:
assignfile (d,'LPT1:');
Das geht ja wohl sowieso nicht. LPT1: ist lokal vorhanden. Was muß nun da hin im Netzwerk ? Wie wäre es z.B. auch bei USB und wenn es auch nur lokal ist ?

Soll ich vielleicht einen PrintDialog einsetzen ?

Tubos 27. Sep 2004 20:49

Re: Netzwerkdrucker druckt nicht
 
Zitat:

Soll ich vielleicht einen PrintDialog einsetzen ?
Das ist eine sehr gute Idee weil du außerdem nicht weißt auf welchem Drucker der User ausdrucken möchte - es könnten ja mehrere vorhanden sein!

writeln 27. Sep 2004 21:42

Re: Netzwerkdrucker druckt nicht
 
niemand schreibt hier ungestraft *writeln* :P

Readln und Writeln stammen ja noch aus (DOS)-Zeiten, als Pascal Ausgaben an der Console erfolgten, deshalb ist meines Wissens die *Druckerauswahl* auf (COM:, CON: und LPT: Ports beschränkt).

Als *Workaround* kannst Du versuchen, einen LPT-Port auf einen Netzwerkdrucker zu mappen.
Unter der (DOS)-Eingabeaufforderung mit NET USE.

z.B. wenn der Netzwerkdrucker an einem anderen PC-(Server) hängt mit:
net use LPT2: \\Computername\Druckername
oder wenn der Drucker an einem Printserver hängt mit:
net use LPT2: PrintserverIP\DruckerID

Allerdings mußt Du das ganze per BATch-Datei per Autostart an der jeweiligen Arbeitsstation automatisieren, wenn es eine Dauerhafte Lösung sein soll.

Das ganze ist ziemlich Fehlerträchtig und kompliziert zu administrieren! :roll:

---

Eine bessere Lösung ist, einen Reportgenerator zu benutzen, oder gleich mit dem TPrinter.Canvas von Delphi zu arbeiten.

Grüße

Hansa 28. Sep 2004 01:28

Re: Netzwerkdrucker druckt nicht
 
Zitat:

Zitat von writeln
niemand schreibt hier ungestraft *writeln* :P

hehe, warum denn nicht. Oder habe ich dich auf dem falschen Fuß erwischt ? :mrgreen:

net use LPT2: \\Computername\Druckername

Scheint so zu gehen, aber nicht aus meinem Delphi Programm. Gebe ich "Net use..." von Hand ein, so kommt die Meldung: erfolgreich.

Und mit dem Canvas, das mache ich ungefähr so :

Delphi-Quellcode:
PROCEDURE Breitschrift;
  BEGIN
    Printer.Canvas.Font.Size := 20;
  END;
Geht lokal auch. Und die Administration dürfte per ShellExecute wohl auch kein großes Problem sein.

Mattin 28. Sep 2004 07:10

Re: Netzwerkdrucker druckt nicht
 
Hallo Hansa,

dieses Problem hatte ich auch. In dieser Form funktioniert der Druck
auf einem Netzwerkdrucker einwandfrei. Vorraussetzung ist das der Drucker auf der
Workstation installiert ist.

Delphi-Quellcode:
//sPfad=c:\MeinOrdner, sDatei=MeineDatei, sDrucker= \\MeinPrintServer\HPLaserjet
procedure DruckeDatei(sPfad, sDatei, sDrucker : String);
var
  Read : Integer;
  Port, Datei : File;
  buffer: array [1..128] of Char;
begin
 if FileExists((sPfad + sDatei) then
  begin
   AssignFile(Datei,sPfad + sDatei); // Datei zum Drucken angeben
   Reset(Datei,1);
   AssignFile(Port, sDrucker);      // Drucker zurordnen
   Rewrite(Port, 1);
  repeat
   BlockRead(Datei, buffer, SizeOf(buffer), Read);
   BlockWrite(Port, buffer, Read);
  // Application.ProcessMessages;
  until EOF(Datei) or (Read <> SizeOf(buffer));
  CloseFile(Datei);
  CloseFile(Port);
 end;
end;
Mit der API- Funktion

Delphi-Quellcode:
 AddPrinterConnection(PChar(Drucker));
oder

Delphi-Quellcode:
 DeletePrinterConnection(PChar(Drucker));
kann ein Drucker auf der Workstation installiert werden.

[edit=Sharky]Doppelposting gelöscht. Mfg, Sharky[/edit]

Mattin 28. Sep 2004 07:24

Re: Netzwerkdrucker druckt nicht
 
Ups.... Sorry sollte nicht doppelt sein....

Hansa 5. Okt 2004 14:00

Re: Netzwerkdrucker druckt nicht
 
Hi,

es geht so :

Delphi-Quellcode:
AssignFile (d,'\\SYSDBA\HPLASERJ');
rewrite (d);
und dann eben so weiter :

Delphi-Quellcode:
procedure println (st : string);
begin
  writeln (d,st);
end;
Wie ich das sehe muß man hierzu aber den DOS-Druckernamen verwenden. Wie kann ich den jetzt bei mehreren Druckern ermitteln ?

@Mattin: was zum Teufel soll da das Blockwrite, Port, Buffer usw. ? :shock: Ich sehe darin keinerlei Sinn. 8) Hast du vielleicht einen seriellen Drucker gemeint ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 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