einfache Text-Datei drucken [ERLEDIGT]

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

einfache Text-Datei drucken [ERLEDIGT]

Beitrag von peternmb »

Hallo, ich versuche mich gerade an L&L und scheitere bereits daran, eine einfache Text-Datei zu drucken. Der Designer öffnet sich, und daraus kann ich auch drucken, aber beim eigentlichen Ausdruck passiert Nichts. Ich erhalte den Rückgabewert -4, der mir lt. Hilfe sagt:
Es wurde eine Druckfunktion aufgerufen, obwohl noch kein Druckjob gestartet wurde

Code: Alles auswählen

proc drucke(file)
//
config_druck(file)   // OK
drucke_jetzt(file)   // Rückgabewert -4
//
return


#include "cmbtll10.ch"
procedure config_druck(file)

  LOCAL ctxt:= MemoRead(file), ;
        lName:="LL_txt.lst"

   LL10ModuleInit()

   //D:   List & Label Job oeffnen und handle holen
   hJob := LlJobOpen(-1)

   LlDefineVariableExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )

   LlDefineLayout(hJob, SetAppWindow():GetHWND(),"Designer", LL_PROJECT_LIST, lName )

   LlJobClose(hJob)
   LL10ModuleExit()

return



#include "cmbtll10.ch"
PROCEDURE drucke_jetzt(file)

   LOCAL ctxt:= MemoRead(file), ;
         lName:="LL_txt.lst"

   LL10ModuleInit()

   hJob := LlJobOpen(-1)

   LlDefineVariableExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )

   //  List & Label Druckjob starten
   LlSetPrinterDefaultsDir(hJob, Hauptpfad)

   nRet := LlPrintWithBoxStart(hJob,		;
                     LL_PROJECT_LIST,		;
                     lName,    			;
                     LL_PRINT_PREVIEW,		;
                     LL_BOXTYPE_NORMALWAIT,	;
                     SetAppWindow():GetHWND(),	;
                     "Druckvorschau")
//
   msgbox(str(nRet,10,0))
//
   nLLError := LlPrint(hJob)
   msgbox(str(nLLError,10,0))

   // List & Label-Job beenden
   LlJobClose(hJob)
   LL10ModuleExit()

RETURN
Zuletzt geändert von peternmb am Fr, 09. Jan 2009 11:19, insgesamt 1-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: einfache Text-Datei drucken

Beitrag von Tom »

Für ein List-Projekt sind Felder nötig. Ich finde in Deinem Source kein:

LlDefineFieldStart(hJob)

und auch kein

LlDefineField/Ext(...)

Also setze doch mal das hier vor Dein LlPrintWithBoxStart:

LlDefineFieldStart(hJob)
LlDefineFieldExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )

und dann hinter LlPrintWithBoxStart:

nRet:=LlPrintFields(hJob)

sowie:

do while nRet=LL_WRN_REPEAT_DATA
LlPrint(hJob)
nRet := LlPrintFields(hJob)
enddo

LlPrintEnd(hJob, 0)
Herzlich,
Tom
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: einfache Text-Datei drucken

Beitrag von peternmb »

Hallo Tom,

da ich bei dem Beispiel nur mit Variablen (in diesdem Fall nur einer) und ohne Datenbankfelder arbeite habe ich gehofft ich brauch nichts weiter zuzuweisen.

Ich habe es jetzt so abgeändert:

Code: Alles auswählen

#include "cmbtll10.ch"
PROCEDURE drucke_jetzt(file)

   LOCAL ctxt:= MemoRead(file), ;
         lName:="LL_txt.lst"

   LL10ModuleInit()

   hJob := LlJobOpen(-1)

   LlDefineVariableExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )

   //  List & Label Druckjob starten
   LlSetPrinterDefaultsDir(hJob, Hauptpfad)

   LlDefineFieldStart(hJob)
   LlDefineFieldExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )

   nRet := LlPrintWithBoxStart(hJob,		;
                     LL_PROJECT_LIST,		;
                     lName,    			;
                     LL_PRINT_PREVIEW,		;
                     LL_BOXTYPE_NORMALWAIT,	;
                     SetAppWindow():GetHWND(),	;
                     "Druckvorschau")

   nRet:=LlPrintFields(hJob)

//
   msgbox(str(nRet,10,0))
//

   do while nRet=LL_WRN_REPEAT_DATA
      LlPrint(hJob)
      nRet := LlPrintFields(hJob)
   enddo

   LlPrintEnd(hJob, 0)

   // List & Label-Job beenden
   LlJobClose(hJob)
   LL10ModuleExit()

RETURN


Ich erhalte allerdings immer noch einen Rückgabewert von -4, und irgendeinen Prozess muss ich mit dem Task-Manager beenden. Ich weiß auch nicht, ob die Zeile
LlDefineVariableExt(hJob, "Inhalt", ctxt, LL_TEXT, 0 )
entfernt werden muss, da ja der Variableninhalt jetzt als Feld definiert ist.

Naja, ich habe mich schon gewundert, dass die ersten Schritte mit L&L (Aufruf Designer) so problemlos gingen ...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: einfache Text-Datei drucken

Beitrag von Tom »

Hallo, Peter.

Da das Define vor dem LlDefineFieldStart(hJob) erfolgt, könnte es die Ursache sein. Jede LL-Funktion gibt einen Fehlercode zurück - Du musst einfach nur vor jeden Aufruf ein ? setzen oder den ganzen Aufruf in eine MsgBox() nehmen. Ansonsten sieht der Code gut aus. Um ihn etwas kompakter zu gestalten, würde ich den Designeraufruf über eine Option (Parameter) in die Druckschleife nehmen. Und als Tip für das weitere Programmieren: Es genügt, pro Thread einen LL-Job zu öffnen. Also:

LL10ModuleInit()
hJob := LlJobOpen(-1)

irgendwo an den Anfang des Programmes/Threads, LLJobClose() dann nur bei AppQuit oder beim Schließen des Threads. Sonst frisst L&L Ressourcen auf, außerdem ist es so schneller. Mit LLResetProjectState stellt man sicher, dass verschiedene Jobs nicht zufällig auf ähnliche Daten zugreifen.
Herzlich,
Tom
Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

Re: einfache Text-Datei drucken

Beitrag von Klaus Stebner »

Hallo Peter,

habe es mal ausprobiert mit Projektart Listen.
Hier funktioniert bei mir nur der Designer - nicht der Druck!

Ändere doch mal die Projektart von Listen (.lst) auf Karteikarten (.crd) .
Bei Projektart Karteikarten funktioniert bei mir auch der Druck.

_________________
Gruß Klaus
Gruß Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: einfache Text-Datei drucken

Beitrag von Tom »

Für ein List-Objekt fehlt hier natürlich auch noch die eigentliche Druckschleife, also die Publikation der Felder NACH dem LLPrintWithBoxStart(). Außerdem muss das Formular natürlich eine Tabelle enthalten, sonst wird es natürlich nicht gedruckt.
Herzlich,
Tom
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: einfache Text-Datei drucken

Beitrag von peternmb »

Hallo Klaus
habe es mal ausprobiert mit Projektart Listen.
Hier funktioniert bei mir nur der Designer - nicht der Druck!
ja das ist richtig, der Aufruf des Designers funktioniert problemlos
Ändere doch mal die Projektart von Listen (.lst) auf Karteikarten (.crd) .
ja, als Karteikarte funktioniert das wunderbar, vielen Dank.
Um ihn etwas kompakter zu gestalten, würde ich den Designeraufruf über eine Option (Parameter) in die Druckschleife nehmen. Und als Tip für das weitere Programmieren: Es genügt, pro Thread einen LL-Job zu öffnen.
ja, ist klar. Das Codefragment von mir ist, so wie es ist, ausschließlich zum Testen gedacht
Antworten