Drucken mit HBPrinter - Was geht wie warum ???

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Wer kennt, nutzt oder verabscheut HBPrinterX ?

Ich nutze HBPrinterX ausschließlich
6
16%
Ich nutze HBPrinterX gelegentlich bzw. zusätzlich
9
24%
HBPrinterX habe ich früher mal genutzt
1
3%
geprüft, aber für mich ungeeignet
1
3%
der Schrott gehört verboten
0
Keine Stimmen
In nutze grundsätzlich keine Fremdprodukte
0
Keine Stimmen
Noch nie gehört oder kein Interesse
1
3%
Ich nutze Reportgeneratoren oder ähnliches
9
24%
Ich nehme XbpPrinter() pur
10
27%
 
Abstimmungen insgesamt: 37

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Di, 17. Mai 2011 13:14

Hi,

ich denke dass die Verschachtelung meine interne Zählung durcheinander bringt, bitte teste mal so:

Code: Alles auswählen

nY += oMeinDrucker:LineFeed()
oMeinDrucker:PrintMemo(nLinkerRand, nY, left(cText, len(cText) - 3),,RANDRECHTS - nLinkerRand)
nY += oMeinDrucker:LineFeed()
oMeinDrucker:PrintText(nLinkerRand, nY, "blablabla")
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 17. Mai 2011 15:15

Servus Hubert,

da ist doch kein Unterschied! Die Zuweisung an nY erfolgt in beiden Fällen vor Aufruf Deiner Methode.
LineFeed gibt doch nur die Anzahl an Y-Pixel der aktuellen Schrift zurück, oder hab ich da was falsch verstanden? Kann nicht sein, da es einwandfrei funktioniert.
Die Print-Methoden sollten einfach die Anzahl an Y-Pixel zurückgeben oder ein interner Wert müsste abfragbar sein.
Gibts das?

Danke!
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 17. Mai 2011 15:18

Nachtrag: In Deinem Test.prg ist das Memo leider am Ende des Textes, oder Du gibts einfach nur feste Y-Werte vor, da hätte ich schon nachgesehen.
Wie machst Du das in Deinen Quältexten? :?:
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Di, 17. Mai 2011 16:02

Hallo Werner,

da hast du mich doch glatt erwischt =D>

Ich zähle die "Zeilenzahl" nicht intern mit und kann diese somit auch nicht intern erhöhen. (Intern arbeite ich mit 1/10 mm, nicht mit Zeilen).
Auch ::LineFeed() kennt den aktuellen Zustand nicht.
Dass PrintMemo() die Anzahl der gedruckten Zeilen zurückgibt, das hat was, würde aber meinen meinem bisherigen Modell widersprechen.
:angry5: :angry4: :angry7: :angry1: :angry3: :angry2: :banghead: angry9: :color: :confused2: :coffee: :coffee: :coffee: :coffee: :coffee: :coffee:

Ich könnte eine Instanzvariable füllen, die die Anzahl der Zeilen enthält ... :? keine Code Änderungen ...
Wahrscheinlich hat aber eh niemand abgefragt ob die Methode .t. zurückgeliefert hat ... ich muss darüber nachdenken, wie eilig ist es dir ? ;-)
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 17. Mai 2011 17:29

Servus Hubert,
ohne Deinen Quelltext näher angeschaut zu haben, intern wird aber z. B. die X-Koordinate schon berücksichtigt, ein printText(,nY) macht an der letzten X-Pos weiter.
PrintMemo sollte einfach so wie lineFeed() die Anzahl an Y-Pixel zurückgeben.
Ist nicht so eilig, behelfe mir aktuell mit einem geschätzten Zeilenvorschub. Ist halt ungenau.

Danke.
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Di, 17. Mai 2011 20:22

Hi,

die Gra-Funktionen wissen wo die letzte Zeichenoperation war, dieses nutze ich intern aus ;-)

Richtige Zeilen habe ich ja nur bei der SAY Methode ....
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Mi, 18. Mai 2011 10:02

Servus Hubert,

habs auf dem kurzen Dienstweg gelöst und die printmemo-Methode geändert:

Code: Alles auswählen

//return lSuccess
return nPosY
Läuft einwandfrei, hab gesehen, Du benutzt ja in der printmemo einfach Deine printtext-Methode, bis alles gedruckt ist. Da zählst Du ja sauber die Y-Pixel Zeile für Zeile hoch. :happy7:
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Mi, 18. Mai 2011 23:55

Servus Hubert,

versuche seit geraumer Zeit, mittels PrintBox() eine farbige Box zu drucken, mir gelingt aber der Farbwechsel nicht.
Kannst Du mir bitte ein kurzes (2zeiliges?) Code-Beispiel zeigen, wo die Farbe für die Box gesetzt wird? Dazu dient wohl Deine Methode SetAttrLine()?

Danke!
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Do, 19. Mai 2011 9:05

Hi,

grundsätzlich sind alle Druckmethoden intern Gra...Funktionen.
Deren Aussehen (Attribute) kann man über die Methoden :SetAttr...() ändern, für Flächen (also Box, Arc etc.) ist das ::SetAttrArea().

SetAttrArea( aAttribNeu ) ruft intern GraSetAttrArea() auf. Daher verweise ich bei allen diesen Funktionen direkt auf die Hilfe von Xbase++.
Allerdings mache ich es mir mit den Parametern einfacher, ich übergebe nur das Array mit den GEÄNDERTEN Werten, intern wird das eingearbeitet.
Bei den Flächenfunktionen muss man dann noch mit nFill (=> Xbase++ Handbuch) einstellen, ob man nur die Umrandung, nur die Füllung oder beides zeichnen will ...

Ich sehe, dass ich das in dem TEST.PRG etwas genauer zeigen sollte ;-)

Hier ist das Beispiel:

Code: Alles auswählen

 // Box in aktueller Farbe, also schwarz - this box will be printed with the current color => black
   ::PrintBox(700,900,50,50,"R", GRA_FILL ) // Parameter nFill => GraBox()
   // Box in ROT - this box in RED
   aAttribAlt := ::SetAttrArea( {{ GRA_AA_COLOR, GRA_CLR_RED }} )   // mehrere GRA_AA_ möglich ... - many GRA_AA_ possible
   ::PrintBox(700,950,50,50,"R", GRA_FILL ) // Parameter nFill => GraBox()
   ::ReSetAttrArea( aAttribAlt )
   // Box in alter Farbe, also schwarz - this box will be printed with the saved color => black
   ::PrintBox(700,1000,50,50,"R", GRA_FILL ) // Parameter nFill => GraBox()
Es druckt von oben nach unten je eine schwarze, rote und wieder schwarze Box.
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Do, 19. Mai 2011 12:55

Servus Hubert,

danke, jetzt gehts einwandfrei. =D>
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Fr, 20. Mai 2011 10:23

Werner_Bayern hat geschrieben:Servus Hubert,
habs auf dem kurzen Dienstweg gelöst und die printmemo-Methode geändert:

Code: Alles auswählen

//return lSuccess
return nPosY
Läuft einwandfrei, hab gesehen, Du benutzt ja in der printmemo einfach Deine printtext-Methode, bis alles gedruckt ist. Da zählst Du ja sauber die Y-Pixel Zeile für Zeile hoch. :happy7:
Für dich kannst du das natürlich gerne so machen, aber grundsätzlich muss man mehr beachten, da andere Anwender eventuell den alten Rückgabewert benötigen und weil man die Schrift ja auch gedreht drucken kann, dann braucht man nicht die neu Y sondern die neue X Position. Ich habe die Ändurungen eingearbeitet und nun 3 neue Instanzvariablen eingebaut, die von ::PrintMemo() gefüllt werden:
1.35 - 20.05.2011 (= 2011-05-20)
::PrintMemo() speichert nun die Anzahl der gedruckten Zeilen in ::PrintMemoLineCount
::PrintMemo() speichert nun die GRA-Position der letzten gedruckten Zeilen in ::PrintMemoLinePosX und ::PrintMemoLinePosY
In der Test.PRG habe ich die Anwendung für den normalen Fall dargestellt:

Code: Alles auswählen

   ::PrintMemo(  1500, nPosY, cTxt, "B" , 500 )
   nPosY := ::PrintMemoLinePosY + ::LineFeed()
   ::PrintText( 1500, nPosY , "Anzahl Zeilen: "+ntrim(::PrintMemoLineCount))
Ich denke, dass ich die 1.35 noch heute Abend auf meinen Server lade.

PS: Durch die Änderungen bin ich noch auf einen Fehler in PrintMemo() gestoßen.
Nach CRLF+CRLF im Text wurden zwar noch alle Zeilen hochgezählt, aber nicht mehr gedruckt.
Das muss schon einmal funktioniert haben. :?

PPS: Wer sich noch nicht bei der Abstimmung am Anfang des Threads beteiligt hat, soll das bitte tun ;-)
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Fr, 20. Mai 2011 11:24

brandelh hat geschrieben:PPS: Wer sich noch nicht bei der Abstimmung am Anfang des Threads beteiligt hat, soll das bitte tun ;-)
Danke!

Wink ist angekommen und umgesetzt ;-)
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Mo, 09. Jan 2012 23:30

Servus Hubert,

leidiges Thema, drucken mit PrintMemo.
Wie machst Du das, bzw. wie ist das vorgesehen? Ich muss A4-Seiten bedrucken und u. a. auch mit Memo-Feldern. Deren Inhalt ist ja bekanntlich variabel. Ich kann aber mit Deinen Methoden vorab nicht feststellen, ob der Ausdruck eines Memo-Feldes noch auf die aktuelle Seite (abzüglich unterer Rand) passt oder nicht. Deine Methode druckt ja (bei entsprechenden Parametern) bis zum unteren Rand und bricht dann korrekt ab, gibt dann auch ein .f. zurück.

Jetzt bräuchte ich aber was um festzustellen, wieviele Zeilen (mit Deiner Function WordwrapAT!) bereits gedruckt wurden, um den Rest (wie zu ermitteln?) auf der nächsten Seite drucken zu können. #-o
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 10. Jan 2012 0:48

Servus Hubert,

so wie es aussieht, gibt das PrintMemoLinePosY ein NIL zurück, wenn das Memofeld nur 1 Zeile enthält?
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Di, 10. Jan 2012 8:54

Hallo Werner,

zunächst die Frage, welche Version setzt du ein ? Aktuell ist 1.35 !

Dass ein einzeiliges Memofeld NIL zurückliefert ist ein Fehler, hier habe ich nicht richtig initialisiert.
Bei MemoPrint() hingegen müsste sobald der Text nicht mehr in das vorhandene Fenster passt
ganz unten eine neue Seite aufgerufen und auch bedruckt werden:

Code: Alles auswählen

if lNeedNewPage
  ::NewPage()
  ::PrintForm()
  lNeedNewPage := .f.
endif
Dies ist z.B. dann sinnvoll, wenn man den Fließtext als Memo komplett drucken will.
Für komplexere Seiten mag das eventuell nicht passen.

Du könntest die fixen und variablen Texte in ::PrintForm() für jede Seite einzeln festlegen (die Seitennummer ist da ja bekannt.).
Dann würde PrintMemo() innerhalb seines Rahmens drucken und die anderen Bestandteile würde z.B. in einer DO Case Abfrage :PrintForm() zusteuern.

Code: Alles auswählen

oMyClass:PrintForm()
    * Drucke Bestandteile für alle Seiten ...
    ...
    do case
         case ::nPageNo=1
         case ::nPageNo=2
         case ::nPageNo=3
         case ::nPageNo>1
...
Sicherlich würde aber auch eine zusätzliche Methode Sinn machen, ich versuche das möglichst bald einzubauen:

PrintMemoPage( nPosX, nPosY, cTxt, cAusrichtung, nMaxLen, cArt, nFarbe, cHochQuer, nMaxBis,nLineFeed ) => cRestNochZuDrucken
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 10. Jan 2012 12:11

Servus Hubert,

1.35.

Ich hatte ::nFirstline nicht gesetzt, Danke für den Hinweis, jetzt wird der Rest "korrekt" gedruckt.

Es ist offensichtlich noch ein Fehler in der PrintMemo Methode: Enthält eine Zeile nur 1 Zeichen, wird diese Zeile komplett nicht gedruckt:

Code: Alles auswählen

Dies ist ein Memofeld
Zeile 1
2
3
Zeile 4
Ergibt bei mir den Ausdruck:

Code: Alles auswählen

Dies ist ein Memofeld
Zeile 1
Zeile 4
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Di, 10. Jan 2012 12:58

Ich sehe es mir an.
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Di, 24. Jan 2012 23:54

brandelh hat geschrieben:Ich sehe es mir an.
Servus Hubert,

hattest Du schon Gelegenheit?
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Mi, 25. Jan 2012 8:53

Sorry, im Moment habe ich viel um die Ohren, aber ich denke diese Woche wird es noch was ;-)
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Do, 26. Jan 2012 9:10

Danke, mach Dir keinen Stress. Wollte nur dran erinnert haben.

2 Flaschen Bio-Rotwein sind unterwegs... :wink:
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Do, 26. Jan 2012 9:51

Das hört sich gut an, aber dass ich nach dem Genuß schneller programmiere wage ich zu bezweifeln ;-)
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitrag von Manfred » Do, 26. Jan 2012 10:45

schneller nicht, aber sicherlich viiiel lustiger... :lol:
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Do, 26. Jan 2012 14:31

brandelh hat geschrieben:Das hört sich gut an, aber dass ich nach dem Genuß schneller programmiere wage ich zu bezweifeln ;-)
Ok, hier die Gebrauchsanweisung dazu: 1 halbes Glas vorab zum warm werden und erst nach Erfolg den Rest der ersten Flasche mit Deiner Frau genießen. Die 2. Flasche ist dann genauso zu gebrauchen bei evtl. Nachbesserungsarbeiten :angel12:
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » Do, 26. Jan 2012 16:47

Werner_Bayern hat geschrieben:Servus Hubert,

so wie es aussieht, gibt das PrintMemoLinePosY ein NIL zurück, wenn das Memofeld nur 1 Zeile enthält?
oder auch eine falsche yPos...
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1542
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

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

Beitrag von Werner_Bayern » So, 29. Jan 2012 15:24

Servus Hubert,

leider noch was: Ich schaffe es nicht, printMemo (druckt ja über printText) oder printText zu zentrieren. Kann es sein, dass das nicht funktioniert? Es steht auch im Quelltext bei Dir diesbezüglich was drin.

Danke.
es grüßt euch

Werner

Antworten