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
HBPrinter und Hintergrundfarbe
Moderator: Moderatoren
- Lutz Rübe
- 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
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.
Kann das jemand in die richtige Kategorie verschieben ?
Danke.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: HBPrinter und Hintergrundfarbe
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.
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.
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)
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: HBPrinter und Hintergrundfarbe
Kein Problem,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.
ich denke hier passt es rein
Gruß
Hubert
Hubert
- Lutz Rübe
- 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
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.
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
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)
Vielen Dank für die schnelle Hilfe.
Lutz
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: HBPrinter und Hintergrundfarbe
wie willst du die Positionsangaben anders machen als sie manuell eingeben ...Lutz Rübe hat geschrieben:u.a. die Positionierungsangaben noch manuell eingegeben werden, aber es funktioniert dank Deiner Hilfe zufriedenstellend.
OK, ich verwende meist defines für Spalten oder Variablen für flexible Vorschübe, aber letztendlich geben wir die Position vor.
das war jetzt zwar keine Absicht (ich hatte die Hilfe auf dem rechten Rechner) und den Internetexplorer auf dem linken ...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.
Aber auf das Studium des Handbuches hatte ich ja hingewiesen und das kann nie verkehrt sein
Gruß
Hubert
Hubert