Drucker zuweisen

Alles über Formulare, deren Erstellung und deren eventueller Austausch

Moderator: SYNERPY

Antworten
martin1024
Beiträge: 27
Registriert: Mi Jul 13, 2011 4:23 pm

Drucker zuweisen

Beitrag von martin1024 »

Hallo,

ich würde gerne Etiketten mittels FastReport über einen fest zugeordneten Drucker ausgeben, der nicht der Windows-Standarddrucker ist. Um die Vorschau zu übergehen habe ich bereits im Objektinspektor die Eigenschaft bDirektDruck auf true gesetzt. Das funktioniert gut. Wenn ich im Designer für das Report-Objekt den Wert PrintOptions.Printer von Vorgabe auf den gewünschten Drucker ändere, funktioniert das auch wie gewünscht. Das ist aber nicht sehr elegant, weil man den Report immer ändern müßte, wenn man einen abweichenden Drucker konfigurieren möchte. Außerdem müssen für unterschiedliche Clients unterschiedliche Etikettendrucker angesteuert werden. Störend ist auch, dass nach einem solchen Ausdruck der Etikettendrucker für andere Ausdrucke vorbelegt ist, so daß es dort häufig zu versehentlichen Ausgaben kommen würde, was bei Etikettendruckern besonders ärgerlich ist.

Deshalb wird eine intelligentere Steuerung benötigt. Ich habe deshalb erst einmal versucht, im Designer mit folgendem Code den Drucker zu setzen:

Code: Alles auswählen

Report.PrintOptions.Printer := 'Etikettendrucker';
Ich habe den Code in verschiedenen Ereignissen plaziert, beispielsweise OnReportPrint, OnStartReport und einigen anderen. Leider wird trotzdem nicht über den Etikettendrucker gedruckt. Ich habe auch versucht, nicht über den Designer zu gehen, sondern über den Objektinspektor und dort im frxReport1-Objekt die Eigenschaft PrintOptions zu setzen. Dort kann man aber nichts eintragen. Es erscheint die Meldung "Eigenschaft kann (noch) nicht editiert werden".

Kann mir jemand sagen, wie ich den Drucker gezielt ansteuern kann?

Vielen Dank.

Gruß,
Martin
martin1024
Beiträge: 27
Registriert: Mi Jul 13, 2011 4:23 pm

Re: Drucker zuweisen

Beitrag von martin1024 »

Hallo,

ich habe inzwischen eine Teillösung gefunden, die allerdings nicht gerade elegant ist. Ich setze den gewünschten Drucker nun im OnFormShow-Ereignis. Das funktioniert aber logischerweise nur, wenn man die Eigenschaft bFormShow des FRDxxxxxx-Objekts im Objektinspektor auf true setzt, wodurch das Formular natürlich auch angezeigt wird. Da das in meinem Fall eigentlich nicht gewünscht ist, wird im OnFormShow per Code die Ereignisbehandlung des OK-Buttons aufgerufen und das Formular geschlossen:

Code: Alles auswählen

// OnFormShow
frxReport1.PrintOptions.Printer := 'Druckername';
OkButton := FindComponent('BtnOK');
OkButton.click;
close;
Auf diese Weise lässt sich der Drucker erfolgreich setzen. Abgesehen davon, daß das voll nach dem Von_hinten_durch_die_Brust_ins_Auge-Prinzip läuft, bleiben zwei für den Anwender sichtbare Probleme. Erstens blitzt kurz ein Formular auf, daß der Anwender gar nicht benötigt. Das geht allerdings so schnell, daß man damit wohl leben könnte. Zweitens bleibt der auf diese Weise gesetzte Drucker für alle folgenden FastReport-Ausgaben vorbelegt. Man müßte ihn also hinterher wieder zurück setzen. Dazu habe ich im Moment nur die Idee, zunächst den aktuellen Drucker zwischen zu speichern und zum Schluß durch den Aufruf eines leeren Berichts mit der oben beschriebenen Methode auf ihn zurück zu schalten. Dadurch wird der Lösungsansatz aber nicht wirklich schöner.

Gibt es dazu noch Vorschläge?

Vielen Dank.

Martin
Antworten