Hallo Lutz,
ehrlich gesagt habe ich sowas noch nie gemacht
aber die Methoden sind verfügbar.
Die Methoden rufen intern ja auf die GraFunktionen auf. Daher geht alles was die auch können.
Im Xbase++ Handbuch sollte man nachsehen, was die Grafunktionen können und in der Klasse
dann die Methode aufrufen, die diese GraFunktion aufruft.
Hier gibt es einen einfachen Zusammenhang (und der Quellcode ist ja verfügbar
):
GraSetAttribArea() wird von der Druckerklasse mit der Methode :
SetAttrArea() aufgerufen.
Die Parameter sind ähnlich, allerdings weniger, da die Methoden intern viel mehr wissen,
als eine GraFunktion() - wofür gibt es OOP ?
Genauso ginge es bei den anderen Änderungsfunktionen. Es gibt immer eine Methode mit gleichem
Namen ohne GRA davor. Man übergibt diesen Methoden ein Array mit den gewünschten Änderungen
(man könnte auch alle übergeben, das ist aber nicht nötig).
Intern werden diese Änderungen dann mit der aktuellen Einstellung gemischt und die Methode gibt
zudem die alte Einstellung zurück. Genauso wie die GraSet...() Funktionen auch.
Man könnte mit
GraSetAttrString() GRA_AS_BACKCOLOR und GRA_AS_BGMIXMODE
setzen, das würde aber nur genau den aktuellen Text (mit Blanks ?) so drucken.
Ich denke du möchtest aber die ganze Zeile so haben, da müsste man dann eine gefüllte Box
drucken, so dass dieser hell genug bleibt dass man noch die spätere Schrift lesen kann.
Bei einem Farbdrucker ist das kein Problem, aber bei einem Schwarzweißlaser ist das mit den
Grautönen immer so eine Sache.
Wie bekommt man diese Befehle nun (gemischt) zur Anwendung:
...
zuerst im Handbuch zu GraSetAttrArea() nachsehen, was man anders möchte als normal
um den genauen Aufbau braucht man sich bei meiner Klasse nicht zu kümmern, sondern einfach
ein Array mit den gewünschten Eigenschaftspaaren erstellen (die Methode macht den Rest).
Genauso wie man auch bei einem Fenster nur die aPP angibt, die man ändern möchte.
Code: Alles auswählen
aAttribNeu := { { GRA_AA_BACKCOLOR, GRA_CLR_WHITE},;
{ GRA_AA_COLOR, GRA_CLR_PALEGRAY},; // wahrscheinlich zu dunkel ?
{ GRA_AA_MIXMODE, ? probieren },; // ich vermute einfach weglassen
{ GRA_AA_BGMIXMODE, ? probieren },; // sollte reichen (also Standard)
{ GRA_AA_SYMBOL, GRA_DENSE6 } } // bestimmt das Mischverhältnis 1-8 testen.
// eventuell die Farbe mit GraMakeRGBColor() selbt erzeugen
aAttribAlt := oHBP:setAttrArea(aAttribNeu)
// drucken wir den Hintergrund
... für alle Zeilen
oHBP:PrintBox(nLeftX,nTopY,nSizeX,nSizeY,cRelativAbsolut,GRA_FILL) // oder GRA_OUTLINEFILL
oHBP:PrintText(.....)
...
// zurücksetzen
oHBP:setAttrArea(aAttribAlt)
Die Wirkung muss man auf verschiedenen Druckern testen, grundsätzlich den Text nach dem
Hintergrund drucken und den Hintergrund aus einer sehr hellen Farbe mit GRA_SYM_DEFAULT
(volle Farbe) oder in einem hellen Mischmuster bilden lassen.