Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Form.Print richtig verwenden
hRb - Di 19.10.21 12:02
Titel: Form.Print richtig verwenden
Hallo zusammen
Das Drucken mit Delphi scheint immer noch ein weitgehend weißer Fleck in den Foren zu sein. Zumindest habe ich nichts passendes gefunden.
Ich habe ein Zahlen-Kreuzworträtsel programmiert und möchte für Personen, die keinen PC haben, dieses auf Papier ausdrucken. Die Oberfläche besteht aus einem DrawGrid. In den Feldern stehen mit Canvas eingetragen kleine Zahlen und große Buchstaben. Eine schnelle und einfache Druckmethode erschien mir folgende Procedure zu sein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Printdialog1Click(Sender: TObject); begin if PrintDialog1.Execute then Form1.Print; end; |
Das Druckergebnis, ob mit oder ohne Parameterübergabe, sieht immer gleich aus (siehe Pdf-Anlage).
Frage1: wie erreiche ich, dass der Ausdruck oben und links einen Rand hat, also eine Möglichkeit zum Positionieren (würde gerne zwei Rätsel auf ein Blatt drucken).
Frage2: Der Ausdruck füllt - wie es die Parameter gemäß Delphi-Hilfe beschreiben - nahezu das gesamte Blatt. Gibt es eine Möglichkeit den Ausdruck zu scalieren, im Sinne von Frage1: zwei Rätsel auf einem Blatt?
Danke im Voraus hRb
Ralf Jansen - Di 19.10.21 12:34
Eine spezielle "Druck"-Form erzeugen das nur aus dem DrawGrid plus passenden Rand besteht?
Oder wenn man 2 Rätsel drucken will halt aus 2 DrawGrids?
hRb - Mi 20.10.21 17:02
Da steh ich nun, ich armer Tor! Und bin so klug als wie zuvor.
Zunächst an Th69:
GetFormImage hatte ich schon vorher in der Hilfe gelesen, konnte aber (zunächst) nicht erkennen, wie mir diese Funktion hilft (wie oft: Beispiel fehlt).
Aber weitere Recherchen und 2 Tage Kopfzerbrechen haben geholfen.
Habe mein Programm entkernt und nur die Druckroutine belassen. Wer die beigefügte Datei entzippt findet den Pascalcode und das Progrann in FormDrucken/Win32/Releasen (ggf. neu übersetzen)
Über den
PrinterSetUpDialog lassen sich die Ränder (Top und Left) einstellen. Die Größe (Scalierung) wurde meiner Anwendung angepasst (120%) und muss für andere Anwendungen ggf. verändert werden. Eine "Verfeinerung könnte sein, in dem auch der rechte Rand bzw. der untere Rand ausgewertet wird und die Scalierung aus der Differenz von oben/unten, links/rechts errechnet wird. Allerdings wäre hierbei auch auszuwerten, ob Hoch oder Querformat gedruckt wird (
PageSetupDialog.PageHeight und
PageWidth).
Ich hoffe, anderen hilft ein lauffähiges Beispiel.
Stichwort: Form1 drucken (Grafik drucken)
PS: 2 Rätsel auf ein Blatt: einfach den oberen Rand verschieben
Gruß hRb
Moderiert von Th69: Delphi-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!