Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Di 19.10.21 12:02 
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Printdialog1Click(Sender: TObject);
begin
  if PrintDialog1.Execute then // Dialogfenster anzeigen  Show.Printdialog;
//  Form1.PrintScale:=(poPrintToFit);
//  Form1.PrintScale:=(poProportional);
  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
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 19.10.21 12:40 
Hallo,

mittels GetFormImage bekommst du eine Bitmap und kannst diese dann selber - inklusive der Ränder - mittels Printer drucken.

Falls du nur einzelne Controls (z.B. das DataGrid) drucken willst, dann schau mal in How to get a screen shot of a control.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: 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 user profile iconTh69: Delphi-Tags hinzugefügt
Einloggen, um Attachments anzusehen!