Drucken mit XbpPrintDialog
Moderator: Moderatoren
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Drucken mit XbpPrintDialog
Hallo zusammen,
ich drucke über den Printdialog. funktioniert auch soweit. 2 Punkte habe ich hierbei.
1. kann ich vordefinieren das automatisch auf Landscape gedruckt wird ?
oder geht das beim Dialog nicht- wo der Anwender den Drucker auswählt?
setorientation() ? oder geht dies nur bei xpbprinter
2. Bei der Übergabe des Druckjobs kann die zu druckende Seitenzahl von bis nicht eingestellt werden ? Geht das auch nicht? weiß das einer ?
ich drucke über den Printdialog. funktioniert auch soweit. 2 Punkte habe ich hierbei.
1. kann ich vordefinieren das automatisch auf Landscape gedruckt wird ?
oder geht das beim Dialog nicht- wo der Anwender den Drucker auswählt?
setorientation() ? oder geht dies nur bei xpbprinter
2. Bei der Übergabe des Druckjobs kann die zu druckende Seitenzahl von bis nicht eingestellt werden ? Geht das auch nicht? weiß das einer ?
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
der Printdialog hängt stark von den Konfigurationsvariablen :enable... und :mode ab; sowie von der Xbase++ Version. Ich habe in 1.90 nachgesehen.
zu 1. je nach Drucker und Einstellungen sieht der Printdialog sehr unterschiedlich aus.
Aber eine Auswahl für Querdruck müssten alle anbieten. Mit dem Beispiel aus dem Handbuch zu
XbpPrinterDialog() gelang mir sofort die Auswahl der Druckorientierung.
Oder meintest du die Vorbelegung dieses Wertes ?
Da scheint es nichts zu geben, aber wenn du weißt, dass du das brauchst,
stelle es doch einfach im XbpPrinter-Objekt um, bevor du druckst.
Man muss diese Einstellungen allerdings vor der Zuordnung zum Presentationspace vornehmen. Einzelne Seiten kann man auch dazwischen umschalten, siehe hierzu die Hinweise zu :endPage().
zu 2. sieh mal nach XbpPrinterdialog():pageRange
ob dass das Programm aber selbst beachten muss weiß ich nicht.
In meiner Druckerklasse habe ich das intern geregelt, indem ich nicht gewünschte Seiten überspringe. Allerdings kann XbpPrintDialog auch nur einen Bereich, ich lasse bei mir eine Kombination von Bereichen und Seiten zu.
der Printdialog hängt stark von den Konfigurationsvariablen :enable... und :mode ab; sowie von der Xbase++ Version. Ich habe in 1.90 nachgesehen.
zu 1. je nach Drucker und Einstellungen sieht der Printdialog sehr unterschiedlich aus.
Aber eine Auswahl für Querdruck müssten alle anbieten. Mit dem Beispiel aus dem Handbuch zu
XbpPrinterDialog() gelang mir sofort die Auswahl der Druckorientierung.
Oder meintest du die Vorbelegung dieses Wertes ?
Da scheint es nichts zu geben, aber wenn du weißt, dass du das brauchst,
stelle es doch einfach im XbpPrinter-Objekt um, bevor du druckst.
Man muss diese Einstellungen allerdings vor der Zuordnung zum Presentationspace vornehmen. Einzelne Seiten kann man auch dazwischen umschalten, siehe hierzu die Hinweise zu :endPage().
zu 2. sieh mal nach XbpPrinterdialog():pageRange
ob dass das Programm aber selbst beachten muss weiß ich nicht.
In meiner Druckerklasse habe ich das intern geregelt, indem ich nicht gewünschte Seiten überspringe. Allerdings kann XbpPrintDialog auch nur einen Bereich, ich lasse bei mir eine Kombination von Bereichen und Seiten zu.
Zuletzt geändert von brandelh am Mo, 11. Dez 2006 16:38, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
Zu deinen Fragen muss ich erst vorweg einen Kommentar abgeben :
Das Sample von Alaska zu XbpPrinter ist unvollständig was "PrinterPS"
angeht. Dort werden alle "vor Einstellungen" vorgenommen.
Es geht da vorallem um "oDC:Create( cPrinterObjectName )" was nicht
immer gehen muss und nicht abgefangen wird !
falsch :
richtig :
Wenn du es beim "create" vorgibst dann dort wo auch die Anzahl der
"Kopien" eingestellt wird.
gruss by OHR
Jimmy
Zu deinen Fragen muss ich erst vorweg einen Kommentar abgeben :
Das Sample von Alaska zu XbpPrinter ist unvollständig was "PrinterPS"
angeht. Dort werden alle "vor Einstellungen" vorgenommen.
Es geht da vorallem um "oDC:Create( cPrinterObjectName )" was nicht
immer gehen muss und nicht abgefangen wird !
falsch :
Code: Alles auswählen
FUNCTION PrinterPS( cPrinterObjectName )
LOCAL oPS, oDC := XbpPrinter():New()
...
oDC:Create( cPrinterObjectName )
// keine Prüfung ob "create"d wurde !!!
oPS := XbpPresSpace():New()
Code: Alles auswählen
FUNCTION PRINTERPS( cPrinter, nCopies ,nPaperBin,nOrient,lShow)
LOCAL oDC := XbpPrinter():New()
LOCAL oPS
....
DEFAULT nCopies TO 1
DEFAULT nPaperbin TO XBPPRN_PAPERBIN_AUTO
DEFAULT nOrient TO XBPPRN_ORIENT_PORTRAIT
DEFAULT lShow TO .F.
BEGIN SEQUENCE
IF cPrinter != NIL // if NIL use Windows default?
cPrinter := TRIM(cPrinter)
ENDIF
// Hier testen ob "create"d wurde
IF oDC:Create( cPrinter ) == oDC // = self
ELSE
MsgBox( "! Drucker ist Offline !" )
BREAK // raus
ENDIF
// Printer Status abfragen
nStatus := oDC:PrinterStatus()
DO CASE
CASE nStatus == 1
...
ja, nach der "Status" Abfrage kommt dann :1. kann ich vordefinieren das automatisch auf Landscape gedruckt wird ?
Code: Alles auswählen
ENDCASE nStatus
oDC:setPaperBin(nPaperBin) // welche Kasette
oDC:setNumCopies(nCopies) // Anzahl Kopien
oDC:setOrientation(nOrient) // hoch oder quer
oDC:configure()
// Wenn man einen XbpPrintDialog() haben möchte
IF lShow
oDlg := XbpPrintDialog():new(oDraw)
oDlg:enablePrintToFile := .F.
oDlg:printToFile := .F.
oDlg:enableNumCopies := .T.
oDlg:numCopies := nCopies
oDlg:create()
oPrinter := oDlg:display(oDC) // <<< here use oDC !
oDlg:destroy()
ENDIF
oPS := XbpPresSpace():New()
oPS:Create( )
oPS:configure( oDC, oDC:paperSize(), GRA_PU_LOMETRIC )
RECOVER
oPs := NIL
END
RETURN oPS
Wie willst du es ohne XbpPrinter machen ? Du brachst erst den "oDC" !!!oder geht das beim Dialog nicht- wo der Anwender den Drucker auswählt? setorientation() ? oder geht dies nur bei xpbprinter
Wie schon Hubert erwähnte die ":Range" Methode benutzen.2. Bei der Übergabe des Druckjobs kann die zu druckende Seitenzahl von bis nicht eingestellt werden ? Geht das auch nicht? weiß das einer ?
Wenn du es beim "create" vorgibst dann dort wo auch die Anzahl der
"Kopien" eingestellt wird.
gruss by OHR
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hi Jimmy,
vielen Dank für deine Antwort. agerRange hat funkt. Nur mit dem Landscape habe ich Probleme. Ich kriege eine Runtime-Fehlermeldung
das er setOrientation nicht kennt.
In deinem Beispiel was ist nOrient für eine Variable. Numrerisch.?
Beinhaltet nOrient den Wert wie dieser in xbpdev.ch beschrieben ist ?
Landscape mit 2 ?
vielen Dank für deine Antwort. agerRange hat funkt. Nur mit dem Landscape habe ich Probleme. Ich kriege eine Runtime-Fehlermeldung
das er setOrientation nicht kennt.
In deinem Beispiel was ist nOrient für eine Variable. Numrerisch.?
Beinhaltet nOrient den Wert wie dieser in xbpdev.ch beschrieben ist ?
Landscape mit 2 ?
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Rolf,
ich bin zwar nicht Jimmy, aber ich sende dir mal des leicht abgeänderte Beispiel aus der 1.90 Onlinehilfe.
Dieses funktioniert bei mir einwandfrei.
Wichtig dabei ist,
1. dass man prüft, ob der XbpPrinter <> NIL (abbruch etc.) ist,
2. dass Xbase++ nicht zu alt ist (am Anfang gab es Probleme) und
3. dass man :setOrientation(XBPPRN_ORIENT_LANDSCAPE)
auf ein gültiges XbpPrinter-Object losläßt, welches noch nicht
dem Presentationspace zugeordnet wurde.
Der Parameter entspricht dem aus der XBPDEV.CH, aber man sollte nie die direkten Werte, sondern immer die Platzhalter verwenden, auch wenn die Gefahr einer Änderung eher gering ist.
Die Fehlermeldung 'Methode nicht vorhanden'... läßt nur den Schluss zu, dass das Printerobject nicht richtig erzeugt wurde. Nach oP:create() falls man keinen oDlG:display() benutzt. Eventuell lag ja auch ein Druckerfehler vor !
ich bin zwar nicht Jimmy, aber ich sende dir mal des leicht abgeänderte Beispiel aus der 1.90 Onlinehilfe.
Dieses funktioniert bei mir einwandfrei.
Wichtig dabei ist,
1. dass man prüft, ob der XbpPrinter <> NIL (abbruch etc.) ist,
2. dass Xbase++ nicht zu alt ist (am Anfang gab es Probleme) und
3. dass man :setOrientation(XBPPRN_ORIENT_LANDSCAPE)
auf ein gültiges XbpPrinter-Object losläßt, welches noch nicht
dem Presentationspace zugeordnet wurde.
Der Parameter entspricht dem aus der XBPDEV.CH, aber man sollte nie die direkten Werte, sondern immer die Platzhalter verwenden, auch wenn die Gefahr einer Änderung eher gering ist.
Die Fehlermeldung 'Methode nicht vorhanden'... läßt nur den Schluss zu, dass das Printerobject nicht richtig erzeugt wurde. Nach oP:create() falls man keinen oDlG:display() benutzt. Eventuell lag ja auch ein Druckerfehler vor !
Code: Alles auswählen
// Konfiguration eines Druckjobs
// Das Beispiel demonstriert die verschiedenen Schritte,
// die für die Konfiguration eines Druckjobs erforderlich sind.
#include "Gra.ch"
#include "Xbp.ch"
#include "XBPDEV.CH"
#pragma Library( "XppUI2.lib" )
PROCEDURE Main
LOCAL oPrinter, oPS, oDlg, aSize
oDlg := XbpPrintDialog():new()
oDlg:create()
// Konfiguriertes Drucker Objekt erzeugen
oPrinter := oDlg:display()
oDlg:destroy()
IF oPrinter <> NIL // wichtig !!!
// VOR oPS:create() !!!
// XBPPRN_ORIENT_PORTRAIT Papier vertikal bedrucken
// XBPPRN_ORIENT_LANDSCAPE Papier horizontal bedrucken
oPrinter:setOrientation(XBPPRN_ORIENT_LANDSCAPE)
// Neuen Presentation-Space erzeugen
oPS := XbpPresSpace():new()
// Bedruckbarer Bereich auf dem Papier
aSize := oPrinter:paperSize()
aSize := { aSize[5] - aSize[3], ;
aSize[6] - aSize[4] }
oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC )
// Kleiner Druckjob
oPrinter:startDoc()
GraStringAt( oPS, { 0, aSize[2]-50 }, "Hello World" )
oPrinter:endDoc()
// Aufräumen
oPrinter:destroy()
oPS:destroy()
ENDIF
RETURN
Gruß
Hubert
Hubert
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Drucken Landscape
Hi Hubert,
Danke nochmal für deinen Hinweis. Genauso habe ich es auch. Aber leider funkt. es nicht. Ich muß manuell auf Landscape umstellen. Das wollte ich eigentlich vermeiden. Die aktuelle Version 1.90 habe ich Einsatz.
Danke nochmal für deinen Hinweis. Genauso habe ich es auch. Aber leider funkt. es nicht. Ich muß manuell auf Landscape umstellen. Das wollte ich eigentlich vermeiden. Die aktuelle Version 1.90 habe ich Einsatz.
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Drucken Landscape
hi,
C:\ALASKA\XPPW32\SOURCE\samples\solution\PConfig\PConfig.prg
gruss by OHR
Jimmy
und was passiert bei :Rolf Ramacher hat geschrieben: ...Aber leider funkt. es nicht. Ich muß manuell auf Landscape umstellen. Das wollte ich eigentlich vermeiden. Die aktuelle Version 1.90 habe ich Einsatz.
C:\ALASKA\XPPW32\SOURCE\samples\solution\PConfig\PConfig.prg
gruss by OHR
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
sehr seltsam, bei meinem Canon i965 und Samsung CLP-550n funktioniert das (nicht die Anzeige in dem Druckermenü, sondern der Ausdruck im Querformat.).
Bei gleichem Xbase++ Stand, könnte es ja dann eigentlich nur am Druckertreiber liegen ... was hast du denn für einen ?
Sehr seltsam das alles.
sehr seltsam, bei meinem Canon i965 und Samsung CLP-550n funktioniert das (nicht die Anzeige in dem Druckermenü, sondern der Ausdruck im Querformat.).
Bei gleichem Xbase++ Stand, könnte es ja dann eigentlich nur am Druckertreiber liegen ... was hast du denn für einen ?
Sehr seltsam das alles.
Gruß
Hubert
Hubert
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Drucken Landscape
Hi Jimmi,
also wenn ich meinen Standarddrucker vorab auf Landscape einstelle, dann funktioniert -
C:\ALASKA\XPPW32\SOURCE\samples\solution\PConfig\PConfig.prg
d.h. der nimmt Landscape
Hi Hubert,
also ich habe den HP LaserJet 1100. Wenn ich dieses vordefiniere mit Landscape funkt. das mit meinem Programm auch.
Mein Ziel wäre es im Programm Landscape vorzugeben, egal was der Drucker für eine voreinstellung hat, zumal der Anwender ja den Drucker auswählen kann/muß.
Es ist die Frage, ob dies so überhaupt funktioniert.
also wenn ich meinen Standarddrucker vorab auf Landscape einstelle, dann funktioniert -
C:\ALASKA\XPPW32\SOURCE\samples\solution\PConfig\PConfig.prg
d.h. der nimmt Landscape
Hi Hubert,
also ich habe den HP LaserJet 1100. Wenn ich dieses vordefiniere mit Landscape funkt. das mit meinem Programm auch.
Mein Ziel wäre es im Programm Landscape vorzugeben, egal was der Drucker für eine voreinstellung hat, zumal der Anwender ja den Drucker auswählen kann/muß.
Es ist die Frage, ob dies so überhaupt funktioniert.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Drucken XpbDialog Landscape
Hi Hubert,
hier ist mein Quellcode:
oDlg := XbpPrintDialog():new()
// Druckausgabe nicht standardmäßig in Datei umleiten
oDlg:enablePrintToFile := .f.
oDlg:printToFile := .f.
oDlg:pageRange:=({1,99})
oDlg:create()
// Konfiguriertes Drucker Objekt erzeugen
oPrinter := oDlg:display()
oDlg:destroy()
IF oPrinter <> NIL
oPrinter:setOrientation:=(XBPPRN_ORIENT_LANDSCAPE)
// Neuen Presentation-Space erzeugen
oPS := XbpPresSpace():new()
// Bedruckbarer Bereich auf dem Papier
aSize := oPrinter:paperSize()
aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4] }
oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC )
oPrinter:startDoc()
// Hier erstelle ich die Info die gedruckt wird.
oPrinter:endDoc()
// Aufräumen
oPrinter:destroy()
oPS:destroy()
ENDIF
Habe ich noch etwas übersehen ?
hier ist mein Quellcode:
oDlg := XbpPrintDialog():new()
// Druckausgabe nicht standardmäßig in Datei umleiten
oDlg:enablePrintToFile := .f.
oDlg:printToFile := .f.
oDlg:pageRange:=({1,99})
oDlg:create()
// Konfiguriertes Drucker Objekt erzeugen
oPrinter := oDlg:display()
oDlg:destroy()
IF oPrinter <> NIL
oPrinter:setOrientation:=(XBPPRN_ORIENT_LANDSCAPE)
// Neuen Presentation-Space erzeugen
oPS := XbpPresSpace():new()
// Bedruckbarer Bereich auf dem Papier
aSize := oPrinter:paperSize()
aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4] }
oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC )
oPrinter:startDoc()
// Hier erstelle ich die Info die gedruckt wird.
oPrinter:endDoc()
// Aufräumen
oPrinter:destroy()
oPS:destroy()
ENDIF
Habe ich noch etwas übersehen ?
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rolf,
ich mache es ein wenig anders - erst erzeuge ich das Printer-Objekt mit :create() und danach setze ich mit :SetFormSize() das Papierformat und im Anschluß mit :SetOrientation() die Ausrichtung.
Erst danach übergebe ich das Printerobjekt an den oPS:create()-Aufruf.
Viele Grüße,
Martin
ich mache es ein wenig anders - erst erzeuge ich das Printer-Objekt mit :create() und danach setze ich mit :SetFormSize() das Papierformat und im Anschluß mit :SetOrientation() die Ausrichtung.
Erst danach übergebe ich das Printerobjekt an den oPS:create()-Aufruf.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Drucken XpbDialog Landscape
1. den CODE Tag, damit man es besser lesen kannRolf Ramacher hat geschrieben:Habe ich noch etwas übersehen ?
2. sieh mal die Zeile genau an:
du rufst hier keine Methode auf, sondern versuchst eine Zuweisung an eine Variable, die aber nicht vorhanden ist.Rolf Ramacher hat geschrieben:oPrinter:setOrientation:=(XBPPRN_ORIENT_LANDSCAPE)
Kleiner Tippfehler große Wirkung.
So geht es :
Code: Alles auswählen
oPrinter:setOrientation(XBPPRN_ORIENT_LANDSCAPE)
Gruß
Hubert
Hubert
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Drucken xbpPrintDialog
Hi Hubert,
oohh ja hast Recht. Wer richtig lesen kann ist klar im Vorteil. Aber jetzt habe ich ein weiteres Problem beim Drucken.
Ich muß Hängeetiketten bedrucken, Portrait. Wobei 2 Nebeneinander gehören. Die Texte packe ich in einen String und drucke mit GraStringAt.
Teilweise sind dies Texte, die vom Anwender definiert werden können. also auch unterschiedliche Länge. Nur habe ich das Problem das ich die 2 Texte nicht sauber entsprechend der Vorlage positioniert bekomme.
Mit padr und alltrim auch nicht. Selbst TransForm brachte nicht das gewünschte Ergebnis. Das Auffüllen auf die gleiche Länge habe ich dann mit Chr(255) "geschütztes Zeichen" hinbekommen. Allerdings wird dieses
Zeichen als Y mit ü ausgedruckt. Kann man den Ausdruck unterdrücken?
Oder weißt du eine andere Lösung ?
oohh ja hast Recht. Wer richtig lesen kann ist klar im Vorteil. Aber jetzt habe ich ein weiteres Problem beim Drucken.
Ich muß Hängeetiketten bedrucken, Portrait. Wobei 2 Nebeneinander gehören. Die Texte packe ich in einen String und drucke mit GraStringAt.
Teilweise sind dies Texte, die vom Anwender definiert werden können. also auch unterschiedliche Länge. Nur habe ich das Problem das ich die 2 Texte nicht sauber entsprechend der Vorlage positioniert bekomme.
Mit padr und alltrim auch nicht. Selbst TransForm brachte nicht das gewünschte Ergebnis. Das Auffüllen auf die gleiche Länge habe ich dann mit Chr(255) "geschütztes Zeichen" hinbekommen. Allerdings wird dieses
Zeichen als Y mit ü ausgedruckt. Kann man den Ausdruck unterdrücken?
Oder weißt du eine andere Lösung ?
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Drucken xbpPrintDialog
Wir sind hier nicht mehr bei Clipper !Rolf Ramacher hat geschrieben:...Wobei 2 Nebeneinander gehören. ... Das Auffüllen auf die gleiche Länge habe ich dann mit Chr(255) "geschütztes Zeichen" hinbekommen. Allerdings wird dieses
Zeichen als Y mit ü ausgedruckt...
Oder weißt du eine andere Lösung ?
Auffüllen mit Blanks etc. kann nur funktionieren, wenn man einen fixedFont (courier) verwendet, aber das will doch keiner mehr sehen !
Die Lösung lautet:
Für jede Spalte und Zeile ein GraStringAt() verwenden:
Code: Alles auswählen
Beipiel für 2x7 Etiketten
nSpa1 := 100 // das sind jetzt nur so Beispielswerte aus dem Kopf
nSpa2 := 1000 // abmessen in mm und dann * 10 nehmen
nY := 2000 // erste Druckzeile von unten
... Drucker einrichtung mit startdoc()
for nEtikett := 1 to 7
// erste Zeile
GraStrinAt(oPS,{[b]nSpa1[/b],nY},alltrim(str(nEtikett))+"Etikett links")
GraStrinAt(oPS,{[b]nSpa2[/b],nY},alltrim(str(nEtikett))+"Etikett rechts")
// Vorschub in nächste Zeile
nY -= 40 // 4 mm je Zeile ??
// weitere Zeilen dieses Etiketts
GraStrinAt(oPS,{[b]nSpa1[/b],nY},"...")
GraStrinAt(oPS,{[b]nSpa2[/b],nY},"...")
// am Ende soviel Vorschub, dass man die erste Zeile des nächsten Etiketts erreicht.
nY -= ??? // 4 mm je Zeile ??
next
wenn noch Etiketten zu drucken sind, newPage, ansonsten enddoc...
Wie schon öffters geschrieben hat meine Druckerklasse da erhebliche Vereinfachungen, dort kann man bei der Methode gleich noch die Ausrichtung angeben und auch mehrzeilige Texte mit einem Aufruf drucken, sogar im Blocksatz.
Im Quellcode sieht man dann wie die einzelnen Druckausgaben auf GraStringAt() aufgelöst werden.
Ein Beispiel mit Ettikettendruck ist auch dabei und Druckvorschau
Gruß
Hubert
Hubert