:Revision=4
:html
<<
128.142
Printer-Objekt|Printer
$nosort
--
Das IP-Objekt <!RW>Printer dient dem Low-Level-Zugriff auf Drucker. Die Drucker sollten im Windows-System als 'Generic-Text' oder entsprechend angemeldet sein und werden in den Grundeinstellungen den Druckernummern zugeordnet. Bei der Ausgabe werden die Zeichen direkt an den Drucker bergeben.

Alternativ kann statt eines Drucker-Namens <b><!SW>(DEFAULT)</b> angegeben werden. Der Druck erfolgt dann auf den Standarddrucker des Windows-Systems.

Eine Umleitung der Ausgaben in eine Datei ist ber die Angabe: <b><!SW>(File)Dateiname</b> mglich. <b><!SW>Dateiname</b> kann <a href="128.115.205">Pfadschablonen</a> beinhalten.

Wird statt eines echten Dateinamens <b><!SW>LPT1, <!SW>LPT2</b> ... bzw. <b><!SW>COM1, <!SW>COM2</b> ... angegeben, so erfolgt die Ausgabe direkt auf den entsprechenden Druckerport bzw. Seriellen Port.

<hr width=30% align=left>
<h4>Erweiterung Revision 3:</h4>
Das Objekt Printer untersttzt nun auch eine Art High-Level Zugriff auf die installierten Drucker. Hiermit knnen durch den Interpreter Seiten gestaltet und ausgedruckt werden. Dies funktioniert im Gegensatz zu den Low-Level Routinen nur mit echten Druckern, also nicht bei Ausgabe in eine Datei.

Die Routinen zur seitenweisen Ausgabe finden sich unter <a href="128.142.3">Printer.Job</a>
>>

<<
128.142.1
Funktionen des Printer-Objekts|Funktionen
--
>>
<<
128.142.1.1
Printer.Exists|Exists
--
<!DEF>
function <!TW>Printer.Exists (rPrinterNr : real) : real;
<!TXT>
Liefert <!RW>TRUE, wenn der Drucker <!PW>rPrinterNr im System existiert.
>>
<<
128.142.1.2
Printer.Name|Name
--
<!DEF>
function <!TW>Printer.Name (rPrinterNr : real) : string;
<!TXT>
Liefert den Namen des Druckers <!PW>rPrinterNr.
>>
<<
128.142.1.2
Printer.IsActive|IsActive
--
<!DEF>
function <!TW>Printer.IsActive : real;
<!TXT>
Liefert <!RW>TRUE, wenn &quot;<!RW>Printer&quot; global aktiviert ist.

<!DEF>
function <!TW>Printer.IsActive (rPrinterNr : real) :real;
<!TXT>
Liefert <!RW>TRUE, wenn Printer global aktiviert und der Printer <!PW>rPrinterNr auch aktiv ist.
>>

<<
128.142.1.3
Printer.Error|Error
!128.142.4
--
<!DEF>
function <!TW>Printer.Error (rPrinterNr : real) : real;
<!TXT>
Liefert den Fehlercode der letzten Druckoperation des Druckers <!PW>rPrinterNr.
>>

<<
128.142.2
Prozeduren des Printer-Objekts|Prozeduren
--
>>

<<
128.142.2.1
Printer.Print|Print
!128.142.2.2
--
<!DEF>
procedure <!TW>Printer.Print (rPrinterNr : real; .Value : string|real|vector [; ... ]);
<!TXT>
Ausgabe der Werte hintereinander auf den Drucker <!PW>rPrinterNr. <!PW>Value kannn Real, String oder Vector sein. Zwischen den Werten wird ein Leerzeichen ausgegeben.
>>

<<
128.142.2.2
Printer.Print|PrintLn
!128.142.2.1
--
<!DEF>
procedure <!TW>Printer.PrintLn (rPrinterNr : real; .Value : string|real|vector [; ... ]);
<!TXT>
Wie <!RW>Printer.Print, jedoch wird automatisch CR LF (#13#10) angehngt.
>>

<<
128.142.3
Printer.Job
--

Das Unter-Objekt <!RW>Printer.Job stellt Routinen bereit, um auf installierten Windows-Druckern beliebig gestaltete Seiten auszugeben.

Die Dokumente knnen eine beliebige Kombination aus Text, Bitmaps, Grafik-Elementen und Linien beinhalten.

Die Maeinheiten fr Positionen und Lngen im Print-Job-System sind Millimeter, unabhngig von der Auflsung des Ausgabedruckers.

Die Dokumente werden in Form von Druckauftrgen dem System bergeben. Mit <!RW>Printer.Job.Start wird ein Auftrag gestartet und erscheint in der Warteschlange des gewhlten Druckers. Danach knnen  die zu druckenden Elemente definiert werden und mit <!RW>Printer.Job.Print wird der eigentliche Ausdruck gestartet.

Mit <!RW>Printer.Job.Abort kann ein Druckauftrag abgebrochen werden, ohne, dass gedruckt wird. Es kann jeweils nur ein Druckauftrag gestartet sein. Nicht beendete Druckauftrge werden nach jeweils nach Ende eines Prfablaufes, bei einem Reset oder dem Programmende automatisch abgebrochen.

Beispiel:
<!CODE>
Printer.Job.Start (1, 'Printer-Demo');
Printer.Job.SetFont (12, 'Arial', 'BU');
Printer.Job.Lebel (10, 10, 'Hallo Welt!');
Printer.Job.Print;
<!TXT>
>>

<<
128.142.3.1
Printer.Job.Start|Start
--
<!DEF>
procedure <!TW>Printer.Job.Start (rPrinterNr : real [; sTitle : string [; sOptions : string]]);
<!TXT>
Startet einen neuen Druckauftrag auf dem Drucker <!PW>rPrinterNr.

Dieser Drucker muss ein Windows-Drucker sein - also keine Datei bzw. COM- oder LPT-Port!

Ein vorheriger, nicht beendeter Druckauftrag wird abgebrochen.

Ist <!PW>sTitle angegeben, so wird dieser String als Titel in der Druckerwarteschlange angezeigt, ansonsten ein Dummy-Titel.

Mit <!PW>sOptions knnen zustzliche Einstellungen fr den Druckauftrag vergenommen werden. In prinzip knnen die Einstellungen aus dem Drucker Dialog abgendert werden.
 <!PW>sOptions besteht aus einzelnen, durch <tt>';'</tt> getrennten Teilen, die jeweils die Form: <tt>'Option=Wert'</tt> haben.
Folgende Optionen und Werte sind erlaubt: 
<!STBL>
<!+>Option<!+>Wert<!>
<!c>PAPERWIDTH<!>Breite der Seite in mm<br>Setzt automatisch PAPERSIZE auf 0<!>
<!c>PAPERLENGTH<!>Lnge der Seite in mm<br>Setzt automatisch PAPERSIZE auf 0<!>
<!c>ORIENTATION<!>Ausrichtung der Seite<br>1 = Portrt (Hochformatt)<br>2 = Landschaft (Querformat)<!>
<!c>PAPERSIZE<!>Papierformat<br>
 00 = freies Format
 01 = Letter 8.12 x 11 inch
 02 = Letter Small 8.12 x 11 inch
 03 = Tabloid 11 x 17 inch
 04 = Ledger 17 x 11 inch
 05 = Legal 8.12 x 14 inch
 06 = Statement 5.12 x 8 12 inch
 07 = Executive 7.14 x 10 12 inch
 08 = A3 297 x 420 mm
 09 = A4 210 x 297 mm
 10 = A4 Small 210 x 297 mm
 11 = A5 148 x 210 mm
 12 = B4 (JIS) 250 x 354
 13 = B5 (JIS) 182 x 257 mm
 und einige mehr...<!>
<!c>SCALE<!>Ausgabefaktor in %, 100% = Normalgre, 50%=halbe Gre...<!>
<!c>COPIES<!>Anzahl Kopien<!>
<!c>PRINTQUALITY<!>Druckqualitt<br>1 = Draft (Entwurf)<br>2 = Low (Niedrig)<br>3 = Medium (Normal)<br>4 = High (Beste)<!>
<!c>COLOR<!>Farbe<br>1 = monochrome<br>2 = farbig<!>
<!c>DUPLEX<!>Beidseitiger Druck<br>1 = einseitig<br>2 = vertikal<br>3 = horizontal<!>
<!c>TTOPTION<!>True-Type-Option<br>1 = als Grafik drucken<br>2 = als Softfont laden<br>3 = durch Gertezeichensatz ersetzen<br>4 = als Outline Softfont laden<!>
<!ETBL>

Ob und wie sich die Optionen auswirken ist vom Drucker und vom Druckertreiber abhngig.
>>

<<
128.142.3.2
Printer.Job.Abort|Abort
--
<!DEF>
procedure <!TW>Printer.Job.Abort;
<!TXT>
Bricht einen laufenden Druckauftrag ab.

Ist kein Druckauftrag aktiv, so passiert (bis auf das Setzen eines Fehlercodes) nichts.
>>

<<
128.142.3.3
Printer.Job.Print|Print
--
<!DEF>
procedure <!TW>Printer.Job.Print;
<!TXT>
Schickt den definierten Druckauftrag an den Drucker.

Ist kein Druckauftrag aktiv, so passiert (bis auf das Setzen eines Fehlercodes) nichts.
>>

<<
128.142.3.4
Printer.Job.Error|Error
!128.142.4
--
<!DEF>
function <!TW>Printer.Job.Error : real;
<!TXT>
Liefert den Fehlercode der letzten Druck-Job-Operation.
>>

<<
128.142.4
Fehlercodes
--
<h4>Printer Fehlercodes</h4>
<!STBL>
<!+>Code<!+>Bedeutung<!>
<!c>0<!>kein Fehler<!>
<!c>1<!>Port (LPT oder COM) konnte nicht geffnet werden<!>
<!c>2<!>Timeout des Ports konnte nicht gesetzt werden<!>
<!c>3<!>Datei konnte nicht geffnet werden<!>
<!c>4<!>Text konnte nicht ausgegeben werden (kann Timeout sein)<!>
<!c>5<!>Exception aufgetreten<!>
<!c>6<!>Drucker ist nicht freigegeben<!>
<!c>7<!>Ausgabe auf Windowsdrucker nicht mglich<!>
<!ETBL>


<h4>Printer.Job Fehlercodes</h4>
<!STBL>
<!+>Code<!+>Bedeutung<!>
<!c>0<!>kein Fehler<!>
<!c>101<!>Print.Job kann nicht in Datei drucken<!>
<!c>102<!>Drucker ist nicht bekannt<!>
<!c>103<!>Es wird gerade nichts gedruckt<!>
<!c>104<!>Datei nicht gefunden<!>
<!ETBL>
>>

<<
128.142.3.5
Printer.Job.Label|Label
!128.142.3.11
!128.142.3.10
--
<!DEF>
procedure <!TW>Printer.Job.Label (rX, rY : real; sText : string [; rWidth, rAlign : real]);
<!TXT>
Gibt den String <!PW>sText an der Position <!PW>rX|<!PW>rY (in mm, linke obere Ecke) im Druckauftrag aus.

ber <!PW>rWidth und <!PW>rAlign kann die Ausrichtung gesteuert werden.

<!STBL>
<!+>rAlign<!+>Ausrichtung<!>
<!c>0<!>linksbndig (default), <!PW>rWidth bleibt unbeachtet<!>
<!c>1<!>zentriert in einem <!PW>rWidth mm breiten Bereich<!>
<!c>2<!>rechtsbndig in einem <!PW>rWidth breiten Bereich<br><!REM>(das letzte Zeichen endet also bei <!PW>rX+<!PW>rWidth)<!TXT><!>
<!ETBL>
>>

<<
128.142.3.6
Printer.Job.Frame|Frame
!128.154.9
!128.142.3.9
--
<!DEF>
procedure <!TW>Printer.Job.Frame (rX, rY, rW, rH, rStyle, rColor : real);
<!TXT>
Gibt ein grafisches Objekt an der Position <!PW>rX|<!PW>rY (in mm, linke obere Ecke) aus.

Die Breite und Hhe werden durch <!PW>rW und <!PW>rH (in mm) festgelegt.

<!PW>rStyle whlt die Form des Objekts:
<!STBL>
<!+>rStyle<!+>Form<!>
<!c>0<!>Rechteck<!>
<!c>1<!>Quadrat<!>
<!c>2<!>abgerundetes Rechteck<!>
<!c>3<!>abgerundetes Quadrat<!>
<!c>4<!>Ellipse<!>
<!c>5<!>Kreis<!>
<!ETBL>

Die Farbe des Rahmens wird mit <!RW>Printer.Job.Line.Setup festgelegt.

Die Farbe der Fllung wird von <!PW>rColor bestimmt:
<!STBL>
<!+>rColor<!+>Bedeutung<!>
<!c>-2<!>durchsichtig, keine Fllung<!>
<!c>-1<!>Farbe der Umramdung<!>
<!c>0..15<!>DOS - Farbcode<!>
<!c>16..$FFFFFF<!>RGB Farb Trippel<!>
<!ETBL>
>>

<<
128.142.3.7
Printer.Job.Bitmap|Bitmap
--
<!DEF>
procedure <!TW>Printer.Job.Bitmap (rX, rY : real; sFile : string [; rW : real]);
<!TXT>
Gibt eine Bitmap aus der Datei <!PW>sFile an der Position <!PW>rX|<!PW>rY (in mm, linke obere Ecke) aus. Die Breite wird durch <!PW>rW (in mm)festgelegt. Die Hhe der Bitmap im Ausdruck wird automatisch berechnet. Wird <!PW>rW nicht angegeben, so wird das Bild mit der Druckerauflsung ausgegeben, was je nach Gert oder Datei zu nicht vorhersagbaren Bildgren fhren kann.

Die Datei darf vom Format BMP oder JPG sein und Pfadschablonen beeinhalten.
>>

<<
128.142.3.8
Printer.Job.Line|Line
!128.142.3.9
--
<!DEF>
procedure <!TW>Printer.Job.Line (rX1, rY1, rX2, rY2 : real);
<!TXT>
Zeichnet eine Linie von Koordinatenpaar  <!PW>rX1|<!PW>rY1 zum Koordinatenpaar  <!PW>rX2|<!PW>rY2 (alle in mm) aus.

Breite, Farbe und Art der Linie wird mit <!RW>Printer.Job.Line.Setup festgelegt.
>>

<<
128.142.3.9
Printer.Job.Line.Setup|Line.Setup
!128.142.3.8
!128.142.3.6
--
<!DEF>
procedure <!TW>Printer.Job.Line.Setup (rWidth, rColor, rStyle : real);
<!TXT>
Legt das Aussehen der Linie fr den <!RW>Printer.Job.Line Befehl und die Randlinie der Ausgabe des <!RW>Printer.Job.Frame Befehls fest.

<!PW>rWidth legt die Breite der Linie fest:
<!STBL>
<!+>rWidth<!+>Funktion<!>
<!c>-1<!>ein Pixel des Ausgabegertes<!>
<!c>0<!>Haarlinie - feinste, durch das Ausgabegert erzeugbare Linie<br><!REM>kann im Aussehen von <!PW>rWidth=-1 abweichen<!TXT><!>
<!c>&gt;0<!>Breite der Linie in mm<!>
<!ETBL>
>>

<<
128.142.3.10
Printer.Job.SetFont|SetFont
!128.142.3.5
--
<!DEF>
procedure <!TW>Printer.Job.SetFont (rSize : real [; sName : string [; sStyle : string [; rAngle : real]]]);
<!TXT>
Legt den fr <!RW>Printer.Job.Label verwendeten Zeichensatz fest.

 <!PW>rSize gibt den Schriftgrad (Hhe der Schrift) an. Maeinheit ist <!SW>Punkt (1 Punkt = 1/72 Zoll = ca. 0.35 mm). Wird -1 angegeben, so wird der Schriftgrad nicht gendert.

 <!PW>sName ist der Name der Windows-Schriftart. Wird '' angegeben, so wird die Schriftart nicht gendert.

 <!PW>sStyle legt den Stil der Zeichen fest. Ist der String leer, werden die Zeichen normal ausgegeben. Folgende Zeichen im String haben einen Einfluss auf die Darstellung:

<!STBL>
<!+>Zeichen<!+>Funktion<!+>Beispiel<!>
<!c>-<!>keine nderung (nur allein benutzen!)<!c><font size=-2 color=#707070>(wie zuvor)</font><!>
<!c><font size=-2 color=#707070>(Leerstring)</font><!>Normale Schrift<!c>Beispiel<!>
<!c>B<!>Fett (Bold)<!c><b>Beispiel</b><!>
<!c>U<!>Unterstrichen<!c><u>Beispiel</u><!>
<!c>I<!>Kursiv (Italic)<!c><i>Beispiel</i><!>
<!c>S<!>Durchgestrichen (StrikeOut)<!c><s>Beispiel</s><!>
<!ETBL>

Die Buchstaben in <!PW>sStyle knnen natrlich kombiniert werden:
<!STBL>
<!+>Characters<!+>Beispiel<!>
<!c>BU<!c><b><u>Beispiel</u></b><!>
<!c>IU<!c><i><u>Beispiel</u></i><!>
<!c>BI<!c><b><i>Beispiel</i></b><!>
<!c>BIUS<!c><b><u><i><s>Beispiel</s></i></u></b><!>
<!ETBL>
 
 <!PW>rAngle bestimmt die Rotation des Textes in Grad gegen den Uhrzeigersinn. Bereich 0..359. Wird -1 angegeben, wird die Rotation nicht gendert. Ausgangspunkt fr die Rotation ist immer die linke obere Ecke eines gedachten Rechteckes um den Text. Von 0 abweichende Winkel sind nur mit True-Type-Fonts mglich.
>>
<<
128.142.3.11
Printer.Job.SetColor|SetColor
!128.154.9
!128.142.3.5
--
<!DEF>
procedure <!TW>Printer.Job.SetColor (rColor : real);
<!TXT>
Legt die fr <!RW>Printer.Job.Label verwendete Zeichenfarbe fest.

 <!PW>rColor kann ein DOS Farbcode oder ein RGB Triplet sein.
>>
