Printer.PageWidth..PageHeight

Verweis:
Uses: Printers
Eingabe: Nichts
Ausgabe: XPos,YPos(Integer)
Funktion: Eine nur Lese Eigenschaft. Gibt die Länge und Höhe in Punkte wieder.

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Printer do
    try
      BeginDoc;
      //Hätten Sie es gedacht ?
      ShowMessage('Die Weite vom Druckscreen: ' +
        IntToStr(Canvas.Width) + #13#10 +
        'Die Höhe vom Druckscreen: ' + IntToStr(Canvas.Height));
    finally
      EndDoc;
    end;
end;

Das Beispiel 1 müssen Sie nicht unbedingt Kopieren und ausprobieren. Insbesondere dann, wenn sie keinen PDF- Writer installiert haben. Hier in dem Beispiel wird nichts gedruckt. Ich möchte hier lediglich beweisen, dass die Lese Eigenschaften Printer.Canvas.Width und Printer.Canvas.Height nicht funktionieren, denn das Programm erzeugt folgendes Ergebnis.

Lazarus Printer-Canvas
Printer.Canvas – Höhe und Breite funktioniert nicht.

Das Oben gezeigte Bild ist der Grund warum Sie einen Ausdruck mit den Werten Printer.Canvas.Width und Printer.Canvas.Height nicht begrenzen können. Es wird keinen Ausdruck geben weil sie mit den Werten kein gültiges Rechteck übergeben können.

Somit ist die folgende Programmzeile Schrott:

  Printer.Canvas.Rectangle(0,0,Printer.Canvas.Width,Printer.Canvas.Height);

Beispiel 2

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

procedure TForm1.Button1Click(Sender: TObject);
const
  Dicke = 40;
Var
  h:integer;
begin
  h:=Dicke div 2; //halbe Dicke
  with Printer do
    try
      BeginDoc;
      //Schwarz alles Richtig
      canvas.Pen.Color:=ClBlack;
      canvas.Pen.Width:=Dicke;
      canvas.Rectangle(h,h,PageWidth-h,PageHeight-h);
    finally
      EndDoc;
    end;
end;

Im Gegensatz zu dem Beispiel 1 funktioniert das Beispiel 2 . Da wir Hier mit dem PageWidth und PageHeight arbeiten. Trotzdem müssen wir hier ein paar Feinheiten beachten. Das Folgende Bild habe ich zurecht geschnitten. Da uns in dem Beispiel nur die Ecken interessieren.

Lazarus bis zum Rand drucken.
Wunderbar. Ein passender Rand.

Zunächst haben Wir mit der Konstante Dicke die Dicke in Druckpunkten angegeben. Daraus haben wir mit „h“ Die halbe Dicke berechnet, was der Mitte der Linie entspricht. Wenn wir dann ein Rechteck Zeichen So zeichnen wir es mit der Einstellung Dicke = 40 wie Folgt:

      canvas.Rectangle(20,20,PageWidth-20,PageHeight-20);

Ich habe hier zum besseren Verständnis die einmal die Konstante als Zahl angegeben.

Beispiel 3

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

procedure TForm1.Button1Click(Sender: TObject);
const
  Dicke = 40;
Var
  h:integer;
begin
  h:=Dicke div 2; //halbe Dicke
  with Printer do
    try
      BeginDoc;
      //Schwarz alles Richtig
      canvas.Pen.Color:=ClBlack;
      canvas.Pen.Width:=Dicke;
      canvas.Rectangle(h,h,PageWidth-h,PageHeight-h);
      //Die Hälfte außerhalb des Druckbereichs
      //Bei PageWidth,PageHeight
      //Links und Oben zu weit innen
      canvas.Pen.Color:=ClRed;
      canvas.Pen.Style:=psDot;
      canvas.Rectangle(0,0,PageWidth,PageHeight);
    finally
      EndDoc;
    end;
end;

Was passiert wenn Sie über den Druckbereich hinaus drucken wollen. Sehen Sie hier.

Lazarus TPrinter Linien berechen
Das Ergebnis von Beispiel 2.

Das 3. Beispiel zeigt welche Fehler häufig gemacht werden.Die rot-gepunktete Linie ist Links und Oben nicht an dem Rand. Dies ist dann der Fall, wenn wir hier nicht die Linienbreite durch 2 Teilen. Das ist niccht schön ließe sich aber noch verkraften. Der andere Fall ist weitaus schwerwiegender. Hier Drucken Sie außerhalb des Druck-Bereichs, dies kann zu Fehlfunktionen wie hier führen.Normalerweise steht der Pen.style auf Kopieren.

    property Mode default pmCopy;

Dies bedeutet, dass eine neu gezeichnete Linie die alte nicht überschreibt, wie hier bei der gepunkteten Linie auf der linken und oberen Seite. Dies funktioniert nicht mehr einwandfrei, wenn ein Teil der gezeichneten Linie den Druckbereich verlässt.

Die tatsächliche Dicke Ihrer Linie ist abhängig von der Auflösung Ihres Druckers und der Blattgröße. Hier kommen sie wieder zur Übersicht.