WorkRect-PhysicalRect

Verweis: PageWidth..PageHeight
Uses: Printers
Eingabe: Nichts
Ausgabe: Papierweite,Papierhöhe(Integer)
Funktion: Geben den Arbeits- bzw. den Blattbereich in Druckpunkten vom Typ Trect in Ganzzahlen zurück.

Die Funktionen WorkRect-PhysicalRect gibt Den Arbeitsbereich des zu bedruckenden Papiers zurück. Diese Beiden Funktionen zeigen nicht immer den GleichenWert an. Was soll dass jetzt heißen ? Okay hier die Auflösung. Es gibt Drucker wie FreePDF und viele Tintenstrahl-Drucker die in der Lage sind das komplette Blatt zu bedrucken. Bei Laser-Druckern und vor allen Dingen bei Nadeldruckern, wäre die Eigenschaft ungünstig. Hierdurch kann der Drucker beschädigt oder das nachfolgende Blatt beschmiert werden.

Und so wundert uns dann nicht, dass Die Werte von WorkRect und PhysicalRect von einander abweichen können und PhysicalRect immer größer oder gleich ist. Und damit Wir das ausprobieren können, wie immer hier das Beispiel.

Beispiel 1

Bereiten Sie eine neue IDE Anwendung wie in dieser Anleitung printer4lazarus-installation gezeigt, vor. Zusätzlich benötigen Sie noch Folgende Komponenten:
TButton

function RectToStr(sR: TRect; Absolut: boolean = False): string;
begin
  if Absolut then
    Result := Format('X1= %d, Y1= %d, X2= %d, Y2= %d',
      [sR.Left, sR.Top, sR.Left + sR.Width, sR.Top + sR.Height])
  else
    Result := Format('X= %d, Y= %d, L= %d, H= %d',
      [sR.Left, sR.Top, sR.Width, sR.Height]);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  f: integer;         //Zähler Variable
begin
  //Gehe alle Drucker durch
  for f := 0 to printer.Printers.Count - 1 do
  begin
    printer.PrinterIndex := f;
    //Zeige die Namen und die Druckpunkte an.
    ShowMessage('Druckername: ' + printer.PrinterName + #13#10 +
      'WorkRect:       ' +
      RectToStr(printer.PaperSize.PaperRect.WorkRect) + #13#10 +
      'PhysicalRect:   ' +
      RectToStr(printer.PaperSize.PaperRect.PhysicalRect));
  end;
end;

Wie wir dem Beispiel entnehmen können wird hier eine neue Function definiert die wir von Button1Click aus aufrufen. Diese Funktion wird auf dieser Codeschnipsel-Seite näher erklärt. Durch einen Klick auf den Button, werden alle zu Verfügung stehenden Drucker nach und nach angezeigt. Und zwar mit dem Namen und danach mit den Beiden Parametern für die Arbeitsbereiche. Wobei das WorkRect immer kleiner oder gleich ist. Bei den Virtuellen Druckern wie : Fax, FreePDF und XPS-Drucker… sind die Arbeitsbereiche fast beziehungsweise gleich. Bei einem Laser Drucker, wie hier dem “HP-Laser-Jet 5P” Sieht das etwas anders aus.

Arbeitsbereich eines HP LaserJet 5P
Arbeitsbereich eines HP LaserJet 5P

Hier sieht man durch die Bauart des Druckers den kleineren Druckbereich. Dieser Bereich wird durch den Druckertreiber bestimmt. Der Drucker muss nicht wirklich angeschlossen sein. Da aber der Drucker-Treiber von dem Hersteller programmiert worden ist, so ist dies der richtige Arbeitsbereich. Dieser wird durch die Mechanik und die Verarbeitungsgenauigkeit bestimmt. Je genauer die Zuführung desto geringer darf der Randabstand sein.

Wir brauchen zum programmieren eigentlich beide Werte. Der Arbeitsbereich bezeichnet die Blattgröße in Druckpunkten. Diesen Wert ziehen wir zu Berechnung der Größe in mm heran. Den anderen Wert benötiggen wir als unsere Arbeitsgrenzen,dessen “inneres Rechteck” wir aus technischen Gründen, nicht überschreiten dürfen. Auf dieser externen Internet-Seite sehen Sie eine Tabelle mit den einzelnen Papierformaten und Druckdichten, die dann unsere Druckpunkte bestimmen.