Drucken mit HBPrinter - Was geht wie warum ???

Moderator: Moderatoren

Wer kennt, nutzt oder verabscheut HBPrinterX ?

Ich nutze HBPrinterX ausschließlich
6
14%
Ich nutze HBPrinterX gelegentlich bzw. zusätzlich
10
24%
HBPrinterX habe ich früher mal genutzt
1
2%
geprüft, aber für mich ungeeignet
1
2%
der Schrott gehört verboten
0
Keine Stimmen
In nutze grundsätzlich keine Fremdprodukte
0
Keine Stimmen
Noch nie gehört oder kein Interesse
2
5%
Ich nutze Reportgeneratoren oder ähnliches
11
26%
Ich nehme XbpPrinter() pur
11
26%
 
Insgesamt abgegebene Stimmen: 42

Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von messing »

Servus, kann man mit hbprint auch auf Arrays zugreifen?

SAY ?

Gruß Messing
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

du solltest genauer schreiben, was du meinst, dann fällt die Antwort genauer aus. :wink:

1. Xbase++ kann auf alle seine Datentypen zugreifen und diese an :say(...,xData,...) weitergeben.
2. xData vom Typ Array wird als Var2Char(xData) ausgegeben, dies kann man sehr leicht im Quellcode nachsehen !
3. Vermutlich ist das nicht die Ausgabe die du willst, also besser den gewünschten Inhalt übergeben z.B. ein Arrayfeld aData[2,4] ...
4. xData kann jede Kombination sein die Xbase++ erzeugen kann.
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von messing »

brandelh hat geschrieben:Hi,

du solltest genauer schreiben, was du meinst, dann fällt die Antwort genauer aus. :wink:

1. Xbase++ kann auf alle seine Datentypen zugreifen und diese an :say(...,xData,...) weitergeben.
2. xData vom Typ Array wird als Var2Char(xData) ausgegeben, dies kann man sehr leicht im Quellcode nachsehen !
3. Vermutlich ist das nicht die Ausgabe die du willst, also besser den gewünschten Inhalt übergeben z.B. ein Arrayfeld aData[2,4] ...
4. xData kann jede Kombination sein die Xbase++ erzeugen kann.
Sorry, meinte aEval.

Da in aEval das Array durchgekämmt wird, dachte ich mir, ob es wohl möglich ist, eine SAY Anweisung ausreicht um das Array auszudrucken.

Gruß Messing
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

aEval mit richtigem Codeblock geht natürlich auch, aber man muss auch die Zeilen hochzählen.
Ich persönlich finde hier FOR NEXT sinnvoller, aber ...

Code: Alles auswählen

nZeile   := 5
nSpalte := 10
eEval(aData,{|cZeile| oHBP:say(nZeile++,nSpalte,cZeile)})
das hat jetzt aber nicht wirklich etwas mit dem HBPrinter zu tun, das ist normale Xbase++ Logik.

HBPrint ist eine normale Klasse, erzeugt normale Objekte und mit denen kann man alles machen was in Xbase++ normal ist ;-)
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von messing »

brandelh hat geschrieben:Hi,

aEval mit richtigem Codeblock geht natürlich auch, aber man muss auch die Zeilen hochzählen.
Ich persönlich finde hier FOR NEXT sinnvoller, aber ...

Code: Alles auswählen

nZeile   := 5
nSpalte := 10
eEval(aData,{|cZeile| oHBP:say(nZeile++,nSpalte,cZeile)})
das hat jetzt aber nicht wirklich etwas mit dem HBPrinter zu tun, das ist normale Xbase++ Logik.

HBPrint ist eine normale Klasse, erzeugt normale Objekte und mit denen kann man alles machen was in Xbase++ normal ist ;-)
Danke für den Kopfstoss #-o
Ich glaub bei mir hängt noch das Weekend im Schädel,
Hatte so nen Gedanken, doch irgendwie ist die Umsetzung :banghead: schiefgelaufen.
:idea: :idea: :idea:
Nochmals Danke, manchmal hängts einfach.

Gruss Messing
[erledigt]
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von messing »

Servus,
habe folgende Zeilen:

Code: Alles auswählen

AAdd(drkopfarray,{b+4,10,"Tag","L"})
AAdd(drkopfarray,{b+4,13,"Datum","L"})
AAdd(drkopfarray,{b+4,18,"Anfang","L"})
AAdd(drkopfarray,{b+4,23,"Ende","L"})
AAdd(drkopfarray,{b+4,28,"Stunden","L"})
AAdd(drkopfarray,{b+4,34,"Pause","L"})
AAdd(drkopfarray,{b+4,40,"Import","L"})
AAdd(drkopfarray,{b+4,50,"Export","L"})
AAdd(drkopfarray,{b+4,60,"Leergut","L"})
            for a=10 to 68
AAdd(drkopfarray,{b+5,a,drzeichen,"L"})
            next

            drzeichen:= Chr(32)  + Chr(179) + Chr(32)
for qwe=4 to 5
AAdd(drkopfarray,{b+qwe,12,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,17,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,22,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,27,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,33,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,39,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,49,drzeichen,"L"})
AAdd(drkopfarray,{b+qwe,59,drzeichen,"L"})
next
aEval(drkopfarray,{|cZeile,i| oHBPrinter:say(drkopfarray[i,1],;
drkopfarray[i,2],drkopfarray[i,3],drkopfarray[i,4])})
muß ich bei AEval(drkopfarray,{|cZeile,i| oHBPrinter:say(drkopfarray[i,1]...
das Array in der say Anweisung angeben, oder gibt es eine andere Möglichkeit?

Danke
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hallo,

aEval arbeitet ein Array ab und gibt eine Array Zeile (das kann auch ein Array sein !) als ersten Parameter weiter:

Code: Alles auswählen

aEval(aArray,{|eineArrayZeile,ArrayIndex| .... 

Code: Alles auswählen

AAdd(drkopfarray,{b+qwe,59,drzeichen,"L"})
...
aEval(drkopfarray,{|cZeile,i| oHBPrinter:say(drkopfarray[i,1],drkopfarray[i,2],drkopfarray[i,3],drkopfarray[i,4])})
geht zwar, ist aber umständlicher als nötig !

Zunächst cZeile ist kein String, sondern nach deiner Konstruktion selbst ein Array !
Einfacher wäre also ...

Code: Alles auswählen

aEval(drkopfarray,{|aZeile| oHBPrinter:say(aZeile[1],aZeile[2],aZeile[3],aZeile[4])})
sicherer wäre dann die Verwendung von #define ...

Code: Alles auswählen

#define HB_SAY_PosX 1
#define HB_SAY_PosY 2
#define HB_SAY_Info  3
#define HB_SAY_ALIGN 4
aEval(drkopfarray,{|aZeile| oHBPrinter:say(aZeile[HB_SAY_PosX],aZeile[HB_SAY_PosY],aZeile[HB_SAY_Info],aZeile[HB_SAY_ALIGN])})
der Vorteil läge darin, dass eine nachträgliche Spaltenänderung einfacher ist und die Spalten selbstsprechend sind.
Ist halt zunächst mehr Aufwand.
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von messing »

brandelh hat geschrieben:Hallo,

aEval arbeitet ein Array ab und gibt eine Array Zeile (das kann auch ein Array sein !) als ersten Parameter weiter:

Code: Alles auswählen

aEval(aArray,{|eineArrayZeile,ArrayIndex| .... 

Code: Alles auswählen

AAdd(drkopfarray,{b+qwe,59,drzeichen,"L"})
...
aEval(drkopfarray,{|cZeile,i| oHBPrinter:say(drkopfarray[i,1],drkopfarray[i,2],drkopfarray[i,3],drkopfarray[i,4])})
geht zwar, ist aber umständlicher als nötig !

Zunächst cZeile ist kein String, sondern nach deiner Konstruktion selbst ein Array !
Einfacher wäre also ...

Code: Alles auswählen

aEval(drkopfarray,{|aZeile| oHBPrinter:say(aZeile[1],aZeile[2],aZeile[3],aZeile[4])})
sicherer wäre dann die Verwendung von #define ...

Code: Alles auswählen

#define HB_SAY_PosX 1
#define HB_SAY_PosY 2
#define HB_SAY_Info  3
#define HB_SAY_ALIGN 4
aEval(drkopfarray,{|aZeile| oHBPrinter:say(aZeile[HB_SAY_PosX],aZeile[HB_SAY_PosY],aZeile[HB_SAY_Info],aZeile[HB_SAY_ALIGN])})
der Vorteil läge darin, dass eine nachträgliche Spaltenänderung einfacher ist und die Spalten selbstsprechend sind.
Ist halt zunächst mehr Aufwand.
Vielen Dank! :D
Hab dieses Jahr erst mit Arrays angefangen. Muß also noch ordentlich büffeln! :banghead: :banghead: :banghead:
Gruß
Bruno
Messing
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Dieter »

Hallo Hubert,

ich benutze deine Printer-Klasse und möchte diesmal mit "Class-Code" ein Array
auf Din-A4-Querformat ausdrucken. Die Vorschau für den Druck wird noch
richtig angezeigt. Leider funktioniert das Drucken nicht. Was mache ich
falsch?
Der Code ist folgender:

Code: Alles auswählen

FUNCTION Druck_KF()
LOCAL oListe
oListe := KF_Liste():New()
oListe:create()
IF oListe:IsPrinterError()
   ErrBox("Druckerfehler!")
   RETURN .F.
ELSE
   oListe:addFont("14.Arial")
   oListe:addFont("12.Arial")
   oListe:addFont("9.Arial")
   oListe:PrintingDialog( .t. ,;   // ESC -> close
              .t. ,;               // ALT+Enter and Enter will Print
              xbeK_ALT_P)          // ALT+P will print
ENDIF

RETURN .T.

*----------------------------------------------------------------------



CLASS  KF_Liste FROM HBPrinter

   EXPORTED:
     METHOD Print
     METHOD PrintForm

ENDCLASS




*-------------------------------------------------------------
* die folgenden Methoden anpassen
*-------------------------------------------------------------
METHOD KF_Liste:PrintForm()

   ::HBPrinter:PrintForm()

   * in abgeleiteten Klasse - in derived classes
   //::setOrientation(XBPPRN_ORIENT_PORTRAIT)
   //::setOrientation(XBPPRN_ORIENT_LANDSCAPE)
   //::setFormSize(XBPPRN_FORM_A4)
   ::SetFont(HB_FONT_14Arial)
   ::PrintText(200,2750, "1.Netto-Kostenfachtabelle vom " + DTOC(DATE()) , "L",,,,90)
   ::SetFont(HB_FONT_9Arial)
   ::PrintText(300,2750, "KF","L",,,,90 )
   ::PrintText(300,2700, "Kostenfachname","L",,,,90 )
   ::PrintText(300,1650, "Kalkulation","R",,,,90 )
   ::PrintText(300,1400, "Änderung","R",,,,90 )
   ::PrintText(300,1150, "Abrechnung","R",,,,90 )
   ::PrintText(300,900, "Vergabe","R",,,,90 )
   ::PrintText(300,650, "Prognose BL","R",,,,90 )
   ::PrintText(300,400, "Abweichung","R",,,,90 )
   ::PrintText(300,150, "NaVorsteuer","R",,,,90 )
   ::PrintLine(300,2750,300,150)
RETURN SELF


******-------------------------------------------------------------
METHOD KF_Liste:Print()       // Alle variablen Druckausgaben
   LOCAL posX
   LOCAL i, oKF:=oKF()

   ::nPageNo := 1
   ::lFirstPageForm := .f.         // Formular 1. Seite noch nicht gedruckt

   * Hier folgt ihr Code
   ::HBPrinter:Print()      // möglich, aber eigentlich unnötig

   * in abgeleiteten Klasse


   ::nFirstLine := 350
   PosX := ::nFirstLine
   //::SetFont(HB_FONT_9Arial)
   ::PrintForm() // erste Seite Formular drucken

   FOR i=1 TO oKF:LastRec(1)
       IF posX >= 1900 .or. posX < 0              // Seite voll - page full
          ::NewPage()
          ::PrintForm()
          if ::IsAfterLastPage()   // (spart Zeit, wichtig für Vorschau !)
             exit
          endif
          posX := ::nFirstLine
       endif
       ::PrintText(posx,2750,oKF:aKF[1,i,FI_KF_NR],"L",,,,90)
       ::PrintText(posx,2700,oKF:aKF[1,i,FI_KF_NAME],"L",,,,90)
       ::PrintText(posx,1650,Format_FI_KF(1,i,FI_KF_VORGABE),"R",,,,90)
       ::PrintText(posx,1400,Format_FI_KF(1,i,FI_KF_AENDERUNG),"R",,,,90)
       ::PrintText(posx,1150,Format_FI_KF(1,i,FI_KF_ABRECHNUNG),"R",,,,90)
       ::PrintText(posx,900,Format_FI_KF(1,i,FI_KF_VERGABE),"R",,,,90)
       ::PrintText(posx,650,Format_FI_KF(1,i,FI_KF_PROGNOSE),"R",,,,90)
       ::PrintText(posx,400,Format_FI_KF(1,i,FI_KF_ABWEICHUNG),"R",,,,90)
       ::PrintText(posx,150,Format_FI_KF(1,i,FI_KF_SUMNAVST),"R",,,,90)
       posX += ::LineFeed()
   NEXT
RETURN SELF
Wie gesagt, die Vorschau für den Druck wird noch richtig angezeigt. Aber nur
wenn die Zeile //::setOrientation(XBPPRN_ORIENT_PORTRAIT) auch ausgeschaltet
bleibt. Wird die Zeile eingeschaltet entsteht folgender Fehler:

Version : Xbase++ (R) Version 1.90.331 Betriebssystem : Windows XP
05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: O CLASS: XbpPresSpace
-> VALTYPE: A VALUE: {}
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Fehler bei der Arrayindizierung
oError:filename :
oError:genCode : 4
oError:operation : graPos
oError:osCode : 0 = Der Vorgang wurde erfolgreich beendet.
oError:severity : 2
oError:subCode : 1012
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von _HBPRINTER:PRINTTEXT(1285)
Aufgerufen von KF_LISTE:PRINTFORM(174)
Aufgerufen von KF_LISTE:PRINT(209)
Aufgerufen von HBPRINTDIALOG:PREVIEWDRAW(623)
Aufgerufen von (B)HBPRINTDIALOG:CREATE(302)
Aufgerufen von HBPRINTDIALOG:EVENTLOOP(365)
Aufgerufen von _HBPRINTER:PRINTINGDIALOG(882)
Aufgerufen von DRUCK_KF(35)
Aufgerufen von (B)NETTOANALYSE(838)
Aufgerufen von MAIN(368)

Beim richtigen Drucken entsteht immer folgender Laufzeitfehler:
oError:args :
-> VALTYPE: U VALUE: NIL
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : .not.<NIL>
oError:osCode : 0 = Der Vorgang wurde erfolgreich beendet.
oError:severity : 2
oError:subCode : 3
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von _HBPRINTER:PRINTERPS(1720)
Aufgerufen von HBPRINTDIALOG:PRINT(529)
Aufgerufen von (B)HBPRINTDIALOG:INIT(246)
Aufgerufen von HBPRINTDIALOG:EVENTLOOP(365)
Aufgerufen von _HBPRINTER:PRINTINGDIALOG(882)
Aufgerufen von DRUCK_KF(35)
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

zunächst eine einfache Info ;-)

::setOrientation(XBPPRN_ORIENT_PORTRAIT)
::setOrientation(XBPPRN_ORIENT_LANDSCAPE)
::setFormSize(XBPPRN_FORM_A4)

müssen - wenn überhaupt - außerhalb des Printjobs aufgerufen werden.
Eventuell noch in der Klasse :PRINT() keines Falles aber in PRINTFORM().

Ich nutze beide aber überhaupt nicht, sondern drehe die einzelnen Druckausgaben wie du
es auch gemacht hast. Schließlich will man meist nicht alle Seiten bzw. Texte einer Seite
gedreht haben.

Wenn die Druckvorschau keinen Fehler liefert, muss man eventuell an das Ende der Seite blättern,
es könnte sein, dass die Fehler erst auf einer Folgeseite auftreten ...

ich vermute, dass dein Zugriff auf dein DatenArray den Fehler verursacht ...
schließlich ist meine Bibliothek schon lange im Einsatz und ich habe auch ein Beispiel
mit Array ohne Fehler laufen lassen, aber ich schaue es mir mal an.

Fürs Testen, wenn solch ein Array Fehler auftritt, kann man hingehen und
die Arrays kurzfristig durch reinen Text ersetzen z.B.
PrintText(..., MeinDatenArray(x,y)) -> PrintText(..., "MeinDatenArray(x,y)" )
wenn dann das Programm durchläuft ist es ein Zugriffsproblem z.b. weil eine Dimension nicht stimmt oder ein Element nil ist.
Danach eine Anweisung nach der Anderen zurücksetzen, meist erkennt man hier schon den Fehler ...
ansonsten wenn er wieder auftritt.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hallo Dieter,

deine Version von HBPrinter stimmt nicht mit meiner neuesten überein, daher stimmen auch die Zeilenangaben nicht.
Bitte lade zuerst die neue Version, eventuell ist dann der Fehler schon beseitigt.

Wenn nicht, bitte die fehlerhafte Druckdatei als PRG gezippt mit den aktuellen xpperror.log und xppfatal.log an meine eMail-Adresse senden.
Es kann aber dauern bis ich dazu komme - eventuell findest du den Fehler auch früher ;-)

VALTYPE: U VALUE: NIL - es wurde ein NIL Wert übergeben, wahrscheinlich aber mit etwas anderem gerechnet.
oError:description : Parameter hat falschen Typ - // sicher mit etwas anderem ...
oError:operation : .not.<NIL> - der Quellcode ... .NOT. .... gibt keinen Sinn für .NOT. NIL, also müsste es eine solche Zeile sein:
if ! IsPrinterVorgabe
...
if ! ::_PrinterCreateErr
im aktuellen Code ist aber sichergestellt, dass beide Variablen einen logischen Typ haben bevor es zu der Abfragezeile kommt:

Code: Alles auswählen

*-------------------------------------------------------------
METHOD _HBPrinter:PrinterPS(cPrinterName)
    LOCAL oPS, oDC, nBreite,nHoehe,aPaperSize, IsPrinterVorgabe
    IsPrinterVorgabe := .f.
    if IsNil(::oPrinterPS)              // erster Aufruf - first Time
       if IsNil(::oUseXbpPrinter)       // keine Vorgabe - no preselection
          oPS := XbpPresSpace():New()
          oDC := XbpPrinter():New()
       else
          oPS := XbpPresSpace():New()
          oDC := ::oUseXbpPrinter
          IsPrinterVorgabe := .t.
       endif
    else
       oPS := ::oPrinterPS
       oDC := oPS:device()
       oPS:configure()                  // oDC freigeben - release oDC
       if IsNil(oDC)
          oDC := XbpPrinter():New()
       endif
       if oDC:Status() = XBP_STAT_CREATE  // dann zurücksetzen
          oDC:destroy()
       endif
       if oPS:Status() = XBP_STAT_CREATE  // dann zurücksetzen
          oPS:destroy()
       endif
    endif
    if ! IsPrinterVorgabe
       * Nun haben wir leere Objecte
       oDC:Create(cPrinterName)
    endif
    if IsNil(oDC) .or. oDC:Status() = XBP_STAT_FAILURE
       ::_PrinterCreateErr := .t.
    else
       ::_PrinterCreateErr := .f.
    endif
    if ! ::_PrinterCreateErr
       aPaperSize := oDC:PaperSize()               // hier kommen nur 6 Elemente
       nBreite := aPaperSize[5] - aPaperSize[3]    // laut DOKU sollten es 8 sein.
       nHoehe  := aPaperSize[6] - aPaperSize[4]
       oPS:Create( oDC, {nBreite,nHoehe} , GRA_PU_LOMETRIC )
       ::SetInternalPageVars(oPS)
    endif
RETURN oPS
Es bleibt wie geschrieben, neue HBPrinter-Version (1.34 - 16.09.2010 ) von meiner homepage laden,
neu kompilieren und testen, eventuelle Fehlerdateien mit der Druckdatei zusenden.

8)
Gruß
Hubert
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Dieter »

Hallo Hubert,

habe gerade die Version 1.34 deiner HBPrinter-Klasse neu in mein Programm eingebunden. Hätte ich eigentlich auch selber draufkommen müssen, bevor ich Dir deine wertvolle Zeit stehle. #-o
Jetzt funktioniert alles, wie gewünscht. =D>
Vielen Dank
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hallo Dieter,

freut mich, hast du eigentlich oben schon abgestimmt ;-) :-"
Gruß
Hubert
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Dieter »

Hallo Hubert,

ich habe natürlich schon vor geraumer Zeit abgestimmt und kann gar nicht begreifen, warum hier im Forum nur so wenige deine Klasse einsetzen.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

ich denke, dass ein Großteil lieber einen Reportgenerator nutzt, bzw. diesen zwingend braucht. Das scheint die größte Gruppe zu sein.
die die Xbase++ pur benutzen, haben entweder eine Abneigung gegen Fremdprodukte oder das gelernt benutzt ohne die Klasse zu kennen ...
Gerade Clipper @ SAY drucker hat das Wort KLASSE abgeschreckt ... dafür habe ich die SAY Methode eingeführt.

Wie auch immer ist das GUI Drucken um Welten einfacher als das Gefummel zu DOS Zeiten.
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Hubert,

kann ich mittels HBPRinter auf einen Zebra - Drucker (LP 2844) direkt drucken, oder geht das nur mit EPL-Commandos? Ohne jetzt irgendwas gelesen zu haben, ein Schnelltest mittels HBPrinter oder Word funktionierten nicht, er macht zwar einen Seitenvorschub, druckt jedoch nichts.

Danke.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Wolfgang Ciriack »

Hallo Werner,
schau mal im Express++ Forum, da waren ein paar Tricks zu Zebra Druckern:

http://bb.donnay-software.com:8080/phpb ... ra&start=0
Viele Grüße
Wolfgang
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Wolfgang,

danke. Habs durchgelesen, die Tests laufen bei mir nicht, der Drucker ist mit dem aktuellen Windows-Treiber installiert. Aus Wordpad das gleiche Verhalten wie mit HBPrinter, leerer Seitenvorschub.
Wie läuft das grundsätzlich mit solchen Druckern? Muss da erst im Treiber alles eingestellt werden, sind ja massiv viele Optionen (Etikettgröße etc.) und geht dann das Drucken über HBPrinter, oder muss da auf den ASCII-Modus umgestellt und umständlich über EPL-Befehle gedruckt werden?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

HBPrinter() nutzt intern die XbpPrinter() Klasse, somit ist ein normaler Windowsdruckertreiber nötig.
Wenn Word oder Wordpad etc. nicht drucken kann, kann es auch nicht mit XbpPrinter() bzw. HBPrinter gehen.
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Hubert,

danke, das war mir schon klar. Es muss doch hier irgendjemand schon diese Drucker kennen? Möchte jetzt ungern das 332seitige englische Programmierhandbuch dazu lesen müssen, nur um 1 Zeile Text und 1 Zeile Barcode darauf auszugeben...

Vielleicht poste ich meine Frage als neues Thema hier in diesem Forum?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Vielleicht ist einfach auch nur die Thermo-Einheit defekt... der Drucker wurde vom Kunden gebraucht gekauft und ich darf mich jetzt damit rumschlagen :?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Hallo,
Problem gelöst, es waren die falschen Etiketten im Drucker! angry9:
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Neue Frage: Wie ermittle ich PosY für die nächste Zeile nach einem printmemo (weils auch mehrzeilig sein kann)?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hi,

::PrintMemo() erhöht den internen Zeilenzähler bei jeder neuen Zeile die es selbst benötigt.
Danach einfach die Funktion ::LineFeed() aufrufen, deren Rückgabewert ist die neue Zeile, genauso wie nach z.B. PrintText() ;-)

Code: Alles auswählen

PosY := ::LineFeed()
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Hubert,

dann mache ich was falsch:

Code: Alles auswählen

oMeinDrucker:PrintMemo(nLinkerRand, nY += oMeinDrucker:LineFeed(), left(cText, len(cText) - 3),,RANDRECHTS - nLinkerRand)
nY += oMeinDrucker:LineFeed()
oMeinDrucker:PrintText(nLinkerRand, nY, "blablabla")
Druckt voll in die 2. Zeile des Memos, da es 2zeilig gedruckt wird.
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten