Seite 1 von 1

LL und kontrollierte Schachtansteuerung

Verfasst: Mo, 09. Nov 2009 18:39
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

Re: LL und kontrollierte Schachtansteuerung

Verfasst: Fr, 27. Nov 2009 16:45
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

Re: LL und kontrollierte Schachtansteuerung

Verfasst: Mo, 02. Aug 2010 10:54
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

Re: LL und kontrollierte Schachtansteuerung

Verfasst: Mo, 02. Aug 2010 11:18
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".

Re: LL und kontrollierte Schachtansteuerung

Verfasst: Mo, 02. Aug 2010 11:30
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

Re: LL und kontrollierte Schachtansteuerung

Verfasst: Mo, 02. Aug 2010 11:48
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)