HBPrinter und Hintergrundfarbe

Moderator: Moderatoren

Antworten
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

HBPrinter und Hintergrundfarbe

Beitrag von Lutz Rübe »

Hallo Hubert,

nach längerer Zeit beschäftige ich mich mal wieder mit der Programmierung und habe gleich mal eine Frage:
Ich benutze Deine HBPrinter-Class und bin damit sehr zufrieden. Jetzt taucht bei meinen Ergebnis-Listen das "Problem" der Lesbarkeit auf. Ich möchte die Listen "lesbarer" machen, in dem ich bei jeder zweiten Zeile die Hintergrundfarbe (auf ein helles Grau) ändern möchte.

Dazu habe ich in Deinen Klassen und Methoden keinen Hinweis gefunden.

Geht das nicht oder habe ich da etwas übersehen ?

Lutz
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: HBPrinter und Hintergrundfarbe

Beitrag von Lutz Rübe »

Ich sehe gerade, ich bin in der falschen Kategorie - bin halt länger nicht mehr hier gewesen.

Kann das jemand in die richtige Kategorie verschieben ?

Danke. #-o
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: HBPrinter und Hintergrundfarbe

Beitrag von brandelh »

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.
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: HBPrinter und Hintergrundfarbe

Beitrag von brandelh »

Lutz Rübe hat geschrieben:Ich sehe gerade, ich bin in der falschen Kategorie - bin halt länger nicht mehr hier gewesen.

Kann das jemand in die richtige Kategorie verschieben ?

Danke. #-o
Kein Problem,

ich denke hier passt es rein ;-)
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: HBPrinter und Hintergrundfarbe

Beitrag von Lutz Rübe »

Hallo Hubert,

etwas holprig noch, da vieles auf "Try-and-error" basiert und u.a. die Positionierungsangaben noch manuell eingegeben werden, aber es funktioniert dank Deiner Hilfe zufriedenstellend.

Code: Alles auswählen

aAttribNeu := { { GRA_AA_BACKCOLOR, GRA_CLR_WHITE},;
                { GRA_AA_COLOR, GRA_CLR_PALEGRAY},;   // wahrscheinlich zu dunkel ?
                { GRA_AA_MIXMODE,GRA_FGMIX_OVERPAINT },;          // ich vermute einfach weglassen
                { GRA_AA_BGMIXMODE,GRA_BGMIX_LEAVEALONE},;       // sollte reichen (also Standard)
                { GRA_AA_SYMBOL, GRA_SYM_DENSE6 } }         // bestimmt das Mischverhältnis 1-8 testen.
			aAttribAlt := oHBPrinter:setAttrArea(aAttribNeu)
Aber Du hast es mir auch nicht ganz einfach gemacht und so kleine Test-Hubbel eingebaut: die letzte Variable im Array aAttribNeu lautet: GRA_SYM_DENSE6 und bei den Angaben für den Mix-Mode im Array habe ich die Standardwerte genommen.

Vielen Dank für die schnelle Hilfe.

Lutz
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: HBPrinter und Hintergrundfarbe

Beitrag von brandelh »

Lutz Rübe hat geschrieben:u.a. die Positionierungsangaben noch manuell eingegeben werden, aber es funktioniert dank Deiner Hilfe zufriedenstellend.
wie willst du die Positionsangaben anders machen als sie manuell eingeben ;-) ...
OK, ich verwende meist defines für Spalten oder Variablen für flexible Vorschübe, aber letztendlich geben wir die Position vor.
Lutz Rübe hat geschrieben: Aber Du hast es mir auch nicht ganz einfach gemacht und so kleine Test-Hubbel eingebaut: die letzte Variable im Array aAttribNeu lautet: GRA_SYM_DENSE6 und bei den Angaben für den Mix-Mode im Array habe ich die Standardwerte genommen.
das war jetzt zwar keine Absicht (ich hatte die Hilfe auf dem rechten Rechner) und den Internetexplorer auf dem linken ...

Aber auf das Studium des Handbuches hatte ich ja hingewiesen und das kann nie verkehrt sein :-)
Gruß
Hubert
Antworten