Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi AssignPrn ? (https://www.delphipraxis.net/34853-assignprn.html)

Hansa 29. Nov 2004 12:09


AssignPrn ?
 
Hi,

es geht darum herauszufinden, ob ein Drucker existiert, bzw. besser gesagt, ob ein Treiber installiert ist.
Delphi-Quellcode:
  AssignFile (d,Treibername);
  (*$I-*) rewrite (d); (*$I+*)
  io := ioresult;
  if (io <> 0) then begin
    showmessage ('Druckerfehler : '+IntToStr (io)+#10#13+
                 'Drucker : '+TreiberName+' im System nicht gefunden !'+
                 'Ausgabe ist in Datei "DRUCKER" umgeleitet !');
So ungefähr hatte ich das vor. Jetzt stellt sich allerdings die Frage, wie Windows einen Drucker von einer Datei unterscheidet. Ist der Drucker nicht da, so wird in dem Beispiel eben einfach eine Textdatei angelegt. Insofern erhalte ich nie einen Fehler.

Jetzt gibt es ja noch AssignPrn. Als Parameter habe ich da jedoch nur TextFile. Woher weiß Windows nun, welcher Drucker gemeint ist ??

Der Name des Druckers kommt aus einer INI - Datei und die Fehlermeldung soll kommen, wenn der Drucker noch nicht installiert ist.

roderich 29. Nov 2004 12:19

Re: AssignPrn ?
 
hallo Hansa,

nur kurz auf die Schnelle, das AssignFile/AssignPrn für Druckerausgabe habe ich mir unter Delphi abgewöhnt, stattdessen bin ich mit dem Printer-Objekt aus der Printers-Unit eigentlich gut gefahren. Ob der Drucker existiert, bekommst Du da m.E. in einer Exception beim Printer.BeginDoc mit.

Roderich

roderich 29. Nov 2004 12:38

Re: AssignPrn ?
 
Hansa, noch ein Nachtrag:

TPrinter hat eine Property names Printers, welches die Namen der verfügbaren Drucker enthält. Mit PrinterIndex kannst du aus dieser Liste einen Drucker auswählen.

In deinem Beispiel könntest Du also mit Printer.Printers.IndexOf(MyPrinterName) profen, ob der gewünschte Drucker verfügbar ist und diesen dann auswählen bzw. mit Fehlermeldung abbrechen.

Roderich

Hansa 29. Nov 2004 12:46

Re: AssignPrn ?
 
Gut, ich teste das mal. Allerdings bin ich noch nicht weit gekommen :

Delphi-Quellcode:
  drucker.Create;

  showmessage (IntToSTr (drucker.Printers.IndexOfName ('HKHK')));
Beim create kommt schon Zugriffsverletzung.

roderich 29. Nov 2004 13:01

Re: AssignPrn ?
 
Hansa, du brauchst das TPrinter-Objekt gar nicht zu instanziieren (sprich "createn" 8) ).
Der erste Aufruf der Funktion "Printer" erzeugt im Hintergrund eine globale Instanz der TPrinter-Klasse. Auf die kannste dann einfach mit weiteren Aufrufen von "Printer" zugreifen.

Am einfachsten so:
Delphi-Quellcode:
uses Printers;

...

Printer.BeginDoc;

Printer.Canvas.Draw(blablabla); // Beispiel

Printer.EndDoc;

Allerdings hast du recht, wenn du nur Text ausgeben willst, macht die AssignPrn-Funktion auch Sinn.

Roderich


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