mehrseitige Card erstellen

Moderator: Moderatoren

Antworten
CGoebel
Rookie
Rookie
Beiträge: 3
Registriert: Di, 20. Okt 2009 14:54

mehrseitige Card erstellen

Beitrag von CGoebel »

Hallo L&L Profis,
ich bin blutiger Anfänger mit L&L und versuche jetzt seit einigen Tagen eine mehrseitige Ausgabe zu erzeugen. Natürlich habe ich die Suche im Forum genutzt, aber leider auch nichts passendes gefunden. :?

Zu meinem Problem:
Ich habe ein mehrseitiges Karteikarten-Projekt (keine Listen-Projekt) erstellt und mehrere Ebenen angelegt (Base, Ebene1, Ebene2). Den Ebenen habe ich Seiten zugewiesen (für Seite 1: Page() == 1 usw.)

Wenn ich jetzt die Vorschau anzeigen lasse, wird nur die erste Seite generiert. Auch die Angabe von "Mindestzahl der Druckseiten" = 3 hat nichts gebracht. Auch habe ich dem Element auf Ebene 2 die Eigenschaft "Umbruch vor" = JA gegeben.

Ich habe dann versucht mit einem Beispiel weiter zu kommen. In diesem Beispiel-Projekt werden auch mehrere Seiten erzeugt. Wenn ich hier noch weitere Elemente auf noch mehr Seiten anlege, wird auch die Ausgabe um diese Seitenzahlen verlängert. Das erzeugen der Ausgabe wird aber durch einen Source erzeugt, der im Beispiel nicht zu sehen ist.

Wenn ich nun dieses Beispiel-Projekt durch meinen Source ausgeben lassen möchte, bekomme ich wieder nur eine Seite. Für mich heißt das, das es nicht am Karteikarten-Projekt liegt, sondern daran, wie die Ausgabe erzeugt wird. Im Augenblick mache ich das so [VB6-Code]:
Dim ret As Integer
FileName = "*.crd"

If LL.LlSelectFileDlgTitle(Form1.hwnd, "Choose label file", LL_PROJECT_CARD,
FileName) = LL_ERR_USER_ABORTED Then
Exit Sub
End If

DefineCurrentRecord (False)

ret = LL.LlPrintWithBoxStart(LL_PROJECT_CARD, FileName, LL_PRINT_USERSELECT,
LL_BOXTYPE_NORMALWAIT, hwnd, "Drucke")
ret = LL.LlPrintOptionsDialog(hwnd, "")
ret = LL.LlPrintGetOption(LL_PRNOPT_PRINTDLG_DEST)

DefineCurrentRecord (False)

ret = LL.LlPrint()
ret = LL.LlPrintEnd(0)
Ich würde mich freuen, wenn mir jemand einen Beispiel-Source und ein mehrseitiges Karteikarten-Projekt zur Verfügung stellen könnte. :book:
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: mehrseitige Card erstellen

Beitrag von adrian »

Wir haben auch ein Projekt, bei dem der Kunde vorwählen kann, wieviele Seiten er möchte, dies haben wir wie folgt gelöst:


==> Die ganze Aufbereitung der Variablen

Dann den folgenden Code, dies erzeugt die notwendigen Seiten. Im Layout selbst kannst Du ja mit der Layer-Technik die Seitenzahl abfangen.

FOR nZ:=1 TO self:oFEHLER:LEERZEILE
LlPrint(hJob)
NEXT

Hoffe Du kannst damit was anfangen. Ansonsten bitte nochmals melden, dann können wir dies auch Online anschauen.

adrian
es Grüessli

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

Re: mehrseitige Card erstellen

Beitrag von Tom »

Um mehrseitige Karteikarten-Formulare zu drucken, die man über Ebenen ansteuert, muss man zunächst ermitteln, wie viele Ebenen es im Formular gibt. Das wäre der größte Eintrag für "LayerID" in der LBL-Datei, die ja eine XML-artige Textdatei ist, die man also ziemlich simpel analysieren kann (wenn man weiß, wie viele Ebenen es sind, ist das nicht nötig, aber so ist es flexibler). Der ermittelte Wert ist der höchste für eine Iteration, die eine Variable bestückt, die zum Beispiel "SEITENZAHL" heißt. Diese Variable wiederum legt für jede Ebene fest, ob sie angedruckt wird (Darstellungsbedinung für Ebene 2 ist also "SEITENZAHL=2"). Dann definiert man alle Felder für das Projekt und löst LlPrint() mit jeder Iteration für SEITENZAHL einmal aus:

Code: Alles auswählen

FOR nEbene := 1 to nMaxEbenen
  LlDefineVariableExt(hJob,'SEITENZAHL',LTrim(Str(nEbene,2,0)),LL_NUMERIC,0)
  nRet := LlPrint(hJob)
NEXT
Das geschieht NACH LlPrintStart, LlDefineFields usw. und VOR LlPrintEnd.

Feddisch.
Herzlich,
Tom
CGoebel
Rookie
Rookie
Beiträge: 3
Registriert: Di, 20. Okt 2009 14:54

Re: mehrseitige Card erstellen

Beitrag von CGoebel »

Zuerst mal vielen Dank, für Eure Hilfe. :thumbup:

Ich konnte das Problem gerade eben selbst lösen. Es gibt eine Konstankte mit dem Namen "LL_WRN_REPEAT_DATA". Das wiederum ist ein Rückgabewert von LlPrint(). Immer wenn man LlPrint() aufruft und es gibt eine weitere Seite, wird dies zurückgeben.

Jetzt kann man einfach eine Schleife um den Druckaufruf bauen:
While ListLabel1.LlPrint = LL_WRN_REPEAT_DATA
ret = LL.LlPrint()
Wend
Die Schleife wird jetzt so lange wiederholt, bis die letzte Seite erreicht wurde.

Somit fertig >> Thread schließen. DANKE
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: mehrseitige Card erstellen

Beitrag von Tom »

Da bin ich jetzt aber erstaunt - das ist die (triviale) Vorgehensweise bei normalen (auch mehrseitigen) Tabellenprojekten. Ich hatte Dich so verstanden, dass Du nicht iterierende Daten über mehrere Seiten verteilen wolltest.
Herzlich,
Tom
Antworten