PDA

View Full Version : Drucker ansteuern



Danka
19-Oct-2015, 05:00 AM
Hallo zusammen,

bin gerade ein wenig am rum probieren, da ich von Crystal auf DFReports umsteigen möchte.
Nun bin ich zur "meiner" Druckersteuerung unter Crystal gekommen:
1. In einer Tabelle wird einem Dokumententypen der Drucker hinterlegt
Das sollte noch kein Problem sein, den kann ich, wenn ich es richtig verstanden habe über psPrinterName setzen, mir ist nur nicht ganz klar, wo dir richtige Stelle dazu ist, wenn der Report mit RunReport aufgerufen wird.
2. Druckerschacht

Das wird wohl eine größere Herausforderung... unter Crystal konnte ich nach der Druckerauswahl (ComSelectPrinter) die Schachnummer übergeben (ComPaperSource). Nun hab ich gesehen dass es die Eigenschaft peDefaultSource vom PrintDialog gibt. Konnte bisher aber keine Ergebnisse damit erzielen.
Habe das Problem versucht anders umzugehen und einen weiteren DruckerB einzurichten, der einem DruckerA entspricht mit dem Unterschied, dass der Standardschacht unterschiedlich ist. Leider kommt der Ausdruck immer auf dem Standardschacht des DruckerA raus, auch wenn der DruckerB im psPrinterName gesetzt ist.

Hätte hierzu jemand eine Idee?
Viele Gruesse
Danka

GhostShotIV
20-Oct-2015, 04:59 AM
Hallo Danka,

zu beiden Problemen habe ich in einem Thread (im englischen Teil) die (potentiellen) Antworten dazu gefunden.

Zu 1. Link (http://support.dataaccess.com/Forums/showthread.php?51592-Printing-a-VRW-Report-dircectly-without-print-dialog&p=263160#post263160)
Wie es aussieht, die Property einfach kurz vor der eigentlichen Ausgabe setzen, sollte reichen.

Zu 2. Link (http://support.dataaccess.com/Forums/showthread.php?51592-Printing-a-VRW-Report-dircectly-without-print-dialog&p=262817#post262817)
Roman Köhler hatte hier auch mit dem cPrintDialog gearbeitet. Vielleicht hilft das ja weiter. Ansonsten gäbe es auch noch die "PrintDialog" Klasse, die eigentlich für Crystal gedacht war, die ebenfalls eine Property für den Schacht (DefaultSource) hat. In der Hilfe der Klasse steht, dass diese nur für die CrystalReport Klasse gedacht ist und für andere Zwecke evtl. ungeeignet ist. Ich habe es nicht ausprobiert, aber vielleicht kann diese ja auch verwendet werden und verhält sich vielleicht anders/besser?

Danka
21-Oct-2015, 06:49 AM
Hallo,

Habe es mal ganz einfach versucht, mich am Beispiel mit Drucekrdialog orientiert und folgendes getestet:



Object oPrinterSelection is a cPrintDialog
End_Object

Object oOutputReportButton is a Button
Set Location to 33 4
Set Label to 'Output Report'

Procedure OnClick
Integer iResult iTray
Handle hPrintDlg

Get PrintDialog of oPrinterSelection to iResult
If (iResult <> 0) Begin
Get phPrintDlg of oPrinterSelection to hPrintDlg
Set phPrintDlg of oReport to hPrintDlg
Get peDefaultSource of oPrinterSelection to iTray
send Info_Box iTray
End

Send RunReport of oReport
End_Procedure
End_Object


Die Info_Box gibt immer die richtige, also die ausgewählte Schachtnummer aus (an meinem Drucker die 2 für Schacht2).
Der Aufruf der Procedure PrintReport erfolgt dann auch mit dem richtigen DruckerDialog, die Druckausgabe erfolgt jedoch immer auf dem Standardschacht.
Das dürfte doch schon mal nicht sein oder? Den wenn ich im Dialog einen Schacht auswähle, sollte auch auf diesem gedruckt werden?

Viele Grüße
Danka

GhostShotIV
21-Oct-2015, 07:13 AM
Welche "peOutputDestination" ist denn angegeben? Ich gehe mal von "PRINT_TO_PRINTER" aus? Denn "PRINT_TO_PRINTER_NO_DIALOG" gibt ändert noch an den Flags des Printdialogs herum.

Danka
21-Oct-2015, 07:39 AM
peOutputDestination ist PRINT_TP_PRINTER, setzt man diese auf PRINT_TO_PRINTER_NO_DIALOG ohne psPrinterName zu hinterlegen, wird der Ausdruck automatisch auf den Standarddrucker umgeleitet.

Grüße
Danka

Danka
23-Oct-2015, 03:56 AM
Hallo,

habe noch ein wenig die Doku/Hilfe durchstöbert und bin auf die Report Options gestoßen.
Dort kann der Standardschacht im Report gespeichert werden. Gesetzt wird dieser entweder durch ein Dropdown-Menü oder durch eine Funktion! Dies ließ mein Herz höher schlagen!
Ein kurzer Test und ein lautes JA:

1. Übergabe der, für den Benutzer hinterlegten Schachtnummer in eine Funktion im Report


Set psFunction of oReport sReportId 'Schacht' to ('return ' + sSchacht)

2. Setzen des DefaultSource in den Report Options via Funktion


return {@Schacht}

3. Drucker mit psPrinterName übergeben

Manchmal ist es doch einfacher als man denkt :)
Vielen Dank für die Unterstützung

Grüße
Danka

Carsten
25-Nov-2015, 04:17 PM
Hallo Danka,

ich kann das zwar momentan nicht gebrauchen, denke aber, dass kommt noch auf mich zu. Daher herzlichen Dank für deine Lösung :-)

Grüße
Carsten