Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Druckdateien (*.prn) drucken (https://www.delphipraxis.net/23335-druckdateien-%2A-prn-drucken.html)

quasinix 1. Jun 2004 17:33


Druckdateien (*.prn) drucken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ich bin ein Delphi-Neuling und schreibe gerade an einem Progrämmchen mit dem ich in eine Datei umgeleitete Druckaufträge drucken kann. Soll sozusagen eine Vereinfachung des Komandos

Code:
"lpr -P <Druckername> -S <Servername>"
sein.

Na, einen Drucker auswählen kann ich schon. Die Druckdatei auch. Wie kann ich jetzt die Datei zu dem Ausgewählten Drucker schicken? Der Druckauftrag sollte in der Windows Druckerwarteschlange erscheinen und nicht einfach mit dem Befehl oben realisiert werden.

Über eine Idee würde ich mich sehr freuen ....

Gruß,

Quasinix

Jelly 1. Jun 2004 19:46

Re: Druckdateien (*.prn) drucken
 
Hi,

mit dem Befehl
Code:
print datei.prn
sollte das eigentlich klappen.

Gruß,
Tom

NikoMitDaMacht 1. Jun 2004 21:45

Re: Druckdateien (*.prn) drucken
 
Oder versuchs mal mit shellexecute

quasinix 2. Jun 2004 11:56

Re: Druckdateien (*.prn) drucken
 
Hallo Niko und Jelly,
danke für eure Antwort, aber gibt es nicht irgend ein Komando oder Unit in Delphi mit dem man die Datei zum Drucker schicken kann ohne ein Shellkomando zu benutzen?

Ich bin ja darauf gekommen ein Delphi-Programm zu schreiben weil ich mit dem lpr-Befehl Probleme bekommen habe. Ich wollt nämlich eine ganze Liste von Druckdateien mittels eines kleinen *.bat an den Drucker schicken. Dabei ist dann die Hälfte mit Ausgabe der Fehlermeldung "Drucker ist nicht verfügbar" nicht gedruckt worden. Daraufhin habe ich gedacht ich brauche eine Druckerwarteschlange an die ich die Druckbefehle schicke.

@ Jelly: der Print-Befehl funktioniert bei mir nicht im Shell mit den *.prn-Dateien.

Viele Grüße,

Jan

Jelly 2. Jun 2004 12:38

Re: Druckdateien (*.prn) drucken
 
Zitat:

Zitat von quasinix
@ Jelly: der Print-Befehl funktioniert bei mir nicht im Shell mit den *.prn-Dateien.

Bei mir hats funktioniert... Bedingung ist natürlich daß du die .prn Datei mit dem passendem Druckertreiber erzeugst.

Gruß,
Tom

shmia 2. Jun 2004 12:43

Re: Druckdateien (*.prn) drucken
 
Zitat:

Zitat von quasinix
..., aber gibt es nicht irgend ein Komando oder Unit in Delphi mit dem man die Datei zum Drucker schicken kann ohne ein Shellkomando zu benutzen?

Siehe Daten über Spooler zum Drucker senden

quasinix 2. Jun 2004 17:29

Re: Druckdateien (*.prn) drucken
 
@shmia,
das RAWwrite funktioniert ja soweit ganz gut, nur bin ich grad am Verzweifeln wie ich die *.prn-Datei als String SCHNELL eingelesen bekomme. Dabei können die prn's über 5 MB groß sein. Um den Arbeitsspeicher will ich mich dabei nicht kümmern.

Meine - mir zu langsame - Methode ist:

Code:
  strom := tfilestream.Create('d:\druck.prn',fmopenread);
  strom.Read(wert,sizeof(char)); // wert ist ein char
  for i := 1  to strom.size do
      s := s + wert; // s ist ein String
  begin
Wie kann ich den String aus der Datei mit einem Rutsch füllen? Ich hab es auch schon mit GetMem und Pointern versucht, mir ist dabei aber schleierhaft wie den Inhalt des Pointers in den String werfen soll.

Gruß,

Quasinix

shmia 2. Jun 2004 18:06

Re: Druckdateien (*.prn) drucken
 
Zitat:

Wie kann ich den String aus der Datei mit einem Rutsch füllen?
Ganz einfach: :-D
Delphi-Quellcode:
  strom := tfilestream.Create('d:\druck.prn',fmopenread);
  try
     SetLength(s, strom.Size); // Speicher beschaffen
     strom.ReadBuffer(s[1], strom.Size); //en-Block lesen
   finally
      strom.Free;
   end;

quasinix 2. Jun 2004 18:26

Re: Druckdateien (*.prn) drucken
 
Hallo shmia,
das geht ja richtig flott! Super, dank Dir! Ich verstehe nur nicht, daß man einem String eine Länge zuweisen kann UND was das s[1] bei dem Einlesen bedeutet.

Beim setlength wird doch der "Array" auf eine die gewünschte Länge gebracht, d.h. er hat strom.size Felder. Beim Einlesen weist man doch mit s[1] auf das erste der Felder zu und nicht auf alles. Kannste das noch erklären, wenn Du Lust und Zeit hast ????

Mein Code sieht jetzt so aus:

Delphi-Quellcode:
procedure TDruckdateiblitz_Form.Button1Click(Sender: TObject);
var s : string;
var wert : char;
var i,laenge : longint;
var strom : tfilestream;
begin
  strom := tfilestream.Create('d:\druck.prn',fmopenread);
  try
     SetLength(s, strom.Size); // Speicher beschaffen
     strom.Readbuffer(s[1], strom.Size); //en-Block lesen
   finally
      strom.Free;
  end;

  rawprint(druckername.caption,'Hallo',s);
  showmessage('Fertig!');

end;
Gruß,

quasinix


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