LL und kontrollierte Schachtansteuerung

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

LL und kontrollierte Schachtansteuerung

Beitrag von Peter Schweizer »

Hallo,

ich benutze LL-15 Standard-Version.
Hat jemand einen Tip, wie ich aus dem Programm heraus kontrolliert die Druckerschachtansteuerung realisieren kann.

Eine Lösung, mit dem einzelnen anlegen von Druckern , die dann den entsprechende Schacht als Standardvorgabe gesetzt haben wäre meine "letzte Möglichkeit".

Gruß Peter
Gruss Peter
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: LL und kontrollierte Schachtansteuerung

Beitrag von J.Renseler »

Hallo,

bin gerade erst über deine Frage gestolpert, aber vllt. hilft es dir ja doch noch weiter.

Das ganze kannst du über die L&L Funktion LlSetPrinterInPrinterFile() realisieren.

nRet := LlSetPrinterInPrinterFile( ::hJob, ::nProjType, ::cRepoFile , 0 , ::cRepoPrn, ::cRepoPrnDEV) // Drucker mit DEVMODE Strucktur setzen

- hJob ist dein L&L Druck Job
- nProjType dein Projekttyp (Card, Liste, Label)
- cRepofile dein Report
- (der 4. Parameter ist unwichtig)
- cRepoPrn ist der Name des Druckers auf den du Drucken möchtest
- cRepoPrnDEV ist eine DEVMODE Struktur die sich auf den Drucker bezieht, in dieser Struktur wählst du die Kassette aus.

Diese Devmode Struktur zu erzeugen ist ein bischen kniffelig. Den Code dazu kann ich leider hier nicht posten da er nicht alleine auf meinem Mist gewachsen ist. Wenn du mich per PN anschreibst kann ich ihn dir aber gerne geben.

Alternativ hier die API Funktionen über die das ganze realisiert wurde:

Code: Alles auswählen

DLLFUNCTION OpenPrinterA( @cPrinter, @nHandle, @nDefaults ) USING STDCALL FROM WINSPOOL.DRV // Zugriff auf den Drucker Treiber
DLLFUNCTION DocumentPropertiesA( hWnd, hPrinter, @cDevice, @DevModeOut, @DevModeIn, Mode ) USING STDCALL FROM WINSPOOL.DRV // Zugriff auf die Dokumenten Eigenschaften
DLLFUNCTION ClosePrinter( nHandle ) USING STDCALL FROM WINSPOOL.DRV // Zugriff auf Drucker Beenden

Gruß,
Jannik

P.S: Es könnte sein das ich etwas verzögert antworte, da ich jetzt erstmal mit meinem Umzug beschäftigt bin
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Re: LL und kontrollierte Schachtansteuerung

Beitrag von Scarmo »

Hallo zusammen

Ich bin ebenfalls auf der Suche nach einer Möglichkeit, den Papier-Schacht beim Aufruf eines List & Label-Projekts anzugeben. Gibt es da tatsächlich keine einfache Variante bzw. muss dies zwingend über LlSetPrinterInPrinterfile() geschehen?

Ich bin für jede Antwort dankbar und grüsse Euch herzlich
Marco
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: LL und kontrollierte Schachtansteuerung

Beitrag von Tom »

Hallo, Marco.

LlSetPrinterInPrinterFile() ist simpel, da als Parameter der Klarname des Druckers gewählt werden kann. Wenn man einen Drucker zweimal anlegt - z.B. einmal mit Ansteuerung von Schacht 1 und einmal mit Ansteuerung von Schacht 2 (und unter Angabe entsprechender Druckernamen, also "LaserBeule Schacht 1" und "LaserBeule Schacht 2") -, kann der Nutzer auch irgendwo in der App diesen Drucker wählen, der dann immer auf den entsprechenden Schacht druckt. Ich arbeite für alle (etwa 2.000) Formulare mit LlSetPrinterInPrinterFile() und erlaube überall im Programm jederzeit die Druckerauswahl, optional auch direkt vor dem Ausdruck in einem "erzwungenen" Dialog. Zusätzlich wäre es möglich, in den Druckroutinen z.B. für die Folgeseiten einen abermaligen Druckdialog für LlSetPrinterInPrinterFile() - optional - einzubauen.

Es lässt sich aber auch im Formular selbst wählen: Projekt -> Seitenlayout -> Papierschacht. Das geht aber nur, wenn man kundenspezifische Formulare benutzt (Designer beim Kunden) und alle real vorhandenen Drucker "kennt".
Herzlich,
Tom
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Re: LL und kontrollierte Schachtansteuerung

Beitrag von Scarmo »

Hallo Tom

Vielen Dank für Deine Hilfe! Da unsere Kunden keine PC-Fachleute sind, wäre es für uns natürlich optimal, wenn wir den Schacht (z.B. "Kassette 2") direkt aus unserem Programm an List & Label übergeben könnten (die möglichen Schächte lassen sich ja problemlos in xBase auslesen). Da es sich um eine Kassen-Lösung handelt und ich den Quittungs-Druck über List & Label abwickeln möchte, soll aus Effizienz-Gründen auch kein separates Drucker-Fenster erscheinen.

Momentan arbeiten wir mit LL 13, wo es offenbar keine derartige Möglichkeit gibt... Kann man denn unter LL15 direkt auf die Projekt-Eigenschaften (bzw. eben die Schacht-Ansteuerung) ausserhalb des Designers Einfluss nehmen?

Herzliche Grüsse
Marco
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: LL und kontrollierte Schachtansteuerung

Beitrag von Tom »

Hallo, Marco.

Du kannst in der Druckroutine ermitteln, welche Seite gerade gedruckt wird. Das geht auch schon mit früheren L&L-Versionen. Und dann kannst Du mit LlSetPrinterInPrinterFile() wählen, welcher Drucker bzw. mit welcher DEVMODE-Struktur (Schachtansteuerung über den Treiber - siehe Posting von Jannik) gedruckt wird. Du müsstest dann irgendwo in den Einstellungen Deines Programms wählen lassen, wohin in diesem Fall die ersten und wohin die Folgeseiten gedruckt werden sollen. Meines Erachtens müsste sich aber auch schon mit L&L 13 im Designer festlegen lassen, ob ein Schacht- oder Druckerwechsel für Folgeseiten erfolgen soll (örtliche Topologie muss bekannt sein).

Eine recht abgefahrene, aber elegante Lösung bestünde darin, überhaupt nicht zu drucken, sondern die Preview-Datei nur zu speichern (also kein LlPreviewDisplayEx zu machen und die LL-Datei stattdessen aufzuheben) und über das Storage-System zu drucken. Bei LlStgsysStoragePrint lässt sich erstens wählen, welche Seiten gedruckt werden sollen, und zweitens, wohin (siehe oben). Das verzögert die Druckausgabe nur unmerklich. Außerdem könntest Du z.B. zeitgleich PDF-Fassungen für ein Archivierungssystem ablegen, mit nur zwei oder drei zusätzlichen Zeilen Code.

LlStgSysStoragePrint(cVorschauDatei,cVorschauDateiPfad,cDruckerErsteSeite,cDruckerFolgeSeiten,nStartSeite,nEndSeite,nKopien,nPrintFlags)
Herzlich,
Tom
Antworten