Dokumente sollten innerhalb der Druckvorschau genauso dargestellt werden, wie sie letztendlich auf dem Papier erscheinen. Allerdings ist dies nicht immer gewährleistet, wenn das PrtRtf-Objekt verwendet wird. Heute möchte ich eine Eigenschaft näher beleuchten, die hier Abhilfe schafft.
Die CONZEPT 16-Druckobjekte sind abgesehen vom PrtRtf
-Objekt bereits WYSIWYG-fähig. Dies bedeutet, dass die Ausgabe in der Druckvorschau und auf dem Drucker identisch ist.
Das PrtText
-Objekt stellt diese WYSIWYG-Funktionalität zur Verfügung, weil CONZEPT 16 hier die Berechnung der Text-Formatierung und Darstellung durchführt (unabhängig vom Drucker!).
Beim PrtRtf
-Objekt greift CONZEPT 16 jedoch auf ein von Windows bereitgestelltes Control zurück. Dieses wird von Microsoft in der riched20.dll mitgeliefert. Ab Windows XP mit Service Pack 1 ist die Funktionalität in der msftedit.dll enthalten.
Die Text-Formatierung und Darstellung übernimmt im Falle des PrtRtf
-Objektes also nicht CONZEPT 16, sondern das von Microsoft mitgelieferte Control. Die WYSIWYG-Funktionalität dieses Controls ist jedoch druckerabhängig.
CONZEPT 16 bietet mit der Eigenschaft ppPrtDevice
die Möglichkeit, diese Besonderheit zu berücksichtigen.
Wird in dem Druckjob ein PrtRtf
-Objekt ausgegeben, können die Abweichungen zwischen Vorschau und Druckergebnis terminiert werden, indem der Deskriptor des PrintDevice
-Objekts der Eigenschaft ppPrtDevice
zugewiesen wird. Das Setzen der Eigenschaft muss vor dem Drucken des Textbereiches (PrtAdd()
) innerhalb eines Druckjobs erfolgen.
Der folgende Code demonstriert die Verwendung der Eigenschaft.
// Druckjob erzeugen
tHdlPrintJob # PrtJobOpen(_PrtDocDinA4,'',_PrtJobOpenWrite |
_PrtJobOpenTemp,_PrtTypePrintDoc);
// PrintForm laden
tHdlPrintForm # PrtFormOpen(_PrtTypePrintForm,'PrtForm');
// PrintDocument ermitteln
tHdlDoc # tHdlPrintJob->PrtInfo(_PrtDoc);
// Deskriptor des PrtRtf-Objekts ermitteln
tHdlPrtRtf # tHdlPrintForm->WinSearch('PrtRtf');
// Erste Seite vorbereiten
tHdlPage # tHdlPrintJob->PrtJobWrite(_PrtJobPageStart);
// Quelle des Textes und Name des Textes setzen
tHdlPrtRtf->ppStreamSource # _WinStreamNameText;
tHdlPrtRtf->ppFileName # tTextName;
// Deskriptor des PrintDevice-Objekt zuweisen
tHdlPrtRtf->ppPrtDevice # tPrintDevice;
// Textbereich drucken
tHdlPage->PrtAdd(tHdlPrintForm);
// letzte Seite abschließen
tHdlPrintJob->PrtJobWrite(_PrtJobPageEnd);
// PrintForm entladen, Druckvorschau anzeigen, Druckdevice schließen
tHdlPrintForm->PrtFormClose();
tHdlPrintJob->PrtJobClose(_PrtJobPreview,tPrintDevice);