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.