Rechenkästchen Drucken

Vorbereitung

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

Procedure Gitter(Zeich: Tcanvas;
  XMenge, x, y, Li_AbstandInProzent, AbstandInProzent: integer;
  DoppelteRandDicke: boolean = True);
  //Quadtratische Kästchen auf Papier
  // Benötigt Unit Printers mit USES einbinden
  // Benötigt Printer4Lazarus über
  // Objektinspektor -> Anfordernung einbinden
var
  psAlt: TPenStyle;   //Alter Linienstyle
  bsAlt: TbrushStyle;
  Linkerandabstand, Randabstand: integer;
  Punkte: integer;    //Punkte je kasten
  Kastenlang: integer;//Anzahl der Kästchen lange Seite
  f: integer;         //Zähler Variable
  Dicke: integer; //Speicher die alte stiftbreite
begin
  //wenn Unsinn exit
  if (XMenge < 2) or (XMenge > 10000) or
    (Li_AbstandInProzent + AbstandInProzent >= 100) or
    (AbstandInProzent * 2 >= 100) then
  begin
    //Fehlermeldung
    raise Exception.Create(
      'Funktion Gitter Meldet: Falsche Parameter');
    exit;
  end;
  Linkerandabstand := (x * Li_AbstandInProzent) div 100;
  Randabstand := (y * AbstandInProzent) div 100;
  //Wieviel Punkte hat ein Kästchen
  Punkte := (x - Linkerandabstand - randabstand) div XMenge;
  Kastenlang := (y - randabstand * 2) div Punkte;
  //Vertikal linien
  for F := 1 to XMenge do
    Zeich.Line(F * Punkte + Linkerandabstand, randabstand,
      F * Punkte + Linkerandabstand, Kastenlang *
      Punkte + randabstand);
  //Horizontale Linien
  for F := 1 to Kastenlang do
    Zeich.Line(Linkerandabstand, F * Punkte + randabstand,
      XMenge * Punkte + Linkerandabstand, F * Punkte + randabstand);
  //-------------Rahmen
  //Rette den alten Penstyle und Brushstyle
  psAlt := zeich.pen.style;
  bsAlt := zeich.Brush.Style;
  //Rahmen Auf jedenfall solid - Durchgezogen
  zeich.pen.style := psSolid;
  zeich.Brush.Style :=bsClear;
  if (zeich.Pen.Width < 1) or (zeich.Pen.Width > 200) then
    zeich.Pen.Width := 1;
  Dicke := zeich.Pen.Width;
  //Rahmen mit Doppeltem Rand
  if DoppelteRandDicke then
  begin
    zeich.Pen.Width := Dicke * 2;
    Zeich.Rectangle(Linkerandabstand, randabstand,
      Linkerandabstand + XMenge * Punkte, randabstand +
      Kastenlang * Punkte);
  end;
  //Rahmen ohne doppeltem Rand
  if not DoppelteRandDicke then
  begin
    zeich.Pen.Width := Dicke;
    Dicke := Dicke div 2;
    Zeich.Rectangle(Linkerandabstand, randabstand,
      Linkerandabstand + XMenge * Punkte, randabstand +
      Kastenlang * Punkte);
  end;
  //Stelle den Alten Stiftstyle,dicke und Brushstyle wieder her
  zeich.pen.style := psAlt;
  zeich.Brush.Style := bsAlt;
  zeich.Pen.Width := Dicke;
end;

Ich habe hier mal eine Procedure die es ermöglicht mit wenigen Parametern ein ganzes Blatt zu drucken. Folgende Parameter müssen hier für übergeben werden.

  • Canvas – Die Zeichen Fläche von Printer
  • Anzahl der Kästchen in X – Zwischen 3 und 9999
  • PageWidth, PageHeight – immer übergeben bleibt gleich
  • Linke Seite Abstand – Angaben in Prozent nicht größer als 100 zusammen mit Rand.
  • Die Anderen Randabstände nicht mehr als 50
  • Optional Doppelte Randdicke Default True

Aufruf Beispiel 1

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Schalte auf Hochformat
  Printer.Orientation := poPortrait;
  with Printer do
    try
      BeginDoc;
      //Einstellungen für die Kästchen
      canvas.Pen.Color := clRed;
      canvas.Pen.Width := 3;
      canvas.Pen.Style := psDash;
      gitter(canvas, 40, PageWidth, PageHeight, 10, 5);
      EndDoc;
    finally
    end;
end;

Diese Procedure muss zwischen BeginDoc und EndDoc aufgerufen werden. Sie können den Stift vorher festlegen. Dieser Wird für die inneren Linien übernommen. Der Rand wird logischerweise immer durchgezogen gezeichnet. Der Stift und der Style werden nach Funktions ende wieder hergestellt.

Fehlermeldung Rechenkästchen.
Fehlermeldung Rechenkästchen.

Diese Fehlermeldung erscheint, wenn Sie beispielsweise so einen Aufruf versuchen. Ich habe den Fehler nicht näher beschrieben, da man hier nicht viel falsch machen kann. Es Steht dort nur “Falscher Parameter”.

      gitter(canvas, 40, PageWidth, PageHeight, 60, 40,False);

Hier haben wir mit 40 eine gültige Zahl für die Kästchen angegeben, aber linke Seite 60% und rechte Seite 40% macht 100%. Wo sollen die Kästchen hin, wenn die Seitenränder so groß sind ? also Fehler. Durch das Auslösen der Fehlermeldung haben Sie die Möglichkeit auf den Fehler zu reagieren. Dies bedeutet in diesem Aufruf ” nicht Drucken”. Sehen Sie Hierzu Try..Except….Finally. Bei Vernünftigen Werten Bekommen Sie folgende Ergebnisse.

Procedure Rechenkästchen Verschieden Möglichkeiten.
Verschieden Möglichkeiten.

Wie das Blatt später aussieht hängt im wesentlichen von 2 Faktoren ab. Zum einen von den Einstellungen vor dem Aufruf und zum Anderen von den Übergebenen Parametern.

  • 1 schwarzer Stift,Stift breite 2, Rand doppelt Dick psDot
  • 2 clSkyblue,Breite 2,Randdoppelt Dick,style psDashDotDot
  • 3 clRed,Randdoppelt Dick False, psDashDotDot

Hinweis, wenn Sie den Rand nicht doppelt Dick haben wollen, dann müssen Sie “false” eingeben.