Führende Leerzeichen mit HBPrinterX-Klasse

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

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:

Führende Leerzeichen mit HBPrinterX-Klasse

Beitrag von Lutz Rübe »

Hallo alle zusammen, aber ganz besonders an Hubert !

ich setze seit kurzem die Printer-Klasse von Hubert ein und bin damit im großen und ganzen recht zufrieden. Ich habe dazu nun folgende Fragen bzw. Probleme:

1) bei zeilenweiser Auflistung von Zahlen (Ergebnislisten von Turnieren) fange ich mit der Platz-Nr an. Jedesmal , wenn ein Sprung kommt (von 9 auf 10 bzw. 99 auf 100 - also die Darstellung der Zahl sich um eine Einheit vergrößert) wird der restliche Text der Zeile um eine Einheit nach rechts verschoben. Drucke ich an allererster Position der Zeile jedoch ein Zeichen (z.b. ein ".") ist alles in Ordnung. Wie kann ich das Unterdrücken von Leerzeichen beim Druck verhindern ?

2) Hubert, mit deiner Printer Klasse bekomme ich so wie angegeben keinen Zentrierten Druck hin. Ich muß schon selber die zu druckende Text-Länge und die Druckposition bestimmen.

3) Wie schaffe ich es, mit der HBPrinterX-Klasse proportionale Schrift zu verwenden und bei Tabellarischer Darstellung (Listen mit Zahlen) sauber untereinander positionierte Zahlen (mit 1.000 Punkt und Komma-Stellen) zu drucken ?

4) Wie kann ich mit dieser Printer-Klasse einen anderen als den "default" eingestellten Drucker innerhalb des Programmes benutzen. Die möglichkeiten, die ich gefunden habe, funktionieren bei mir nicht.

Hubert, ich habe noch nicht alle Funktionen Deiner Printer-Klasse ausprobiert, aber das was ich "im Einsatz" habe erfüllt - mit Ausnahme der og. Punkte - meine Anforderungen.

Danke für eine schnelle Antwort (bin zur Zeit zur Kur - ohne Internet - und nur heute zu Hause)

einen schönen Sonntag noch,

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

Re: Führende Leerzeichen mit HBPrinterX-Klasse

Beitrag von brandelh »

Hi Lutz,

wenn du Probleme mit Programmen hast, ist es immer nützlich etwas Quellcode mitzuliefern, damit man bei der Beantwortung nicht so raten muss ;) Hast du auch die neueste Version ?
Auf meiner Homepage kannst du immer sehen was gerade aktuell ist.
Lutz Rübe hat geschrieben:1) bei zeilenweiser Auflistung von Zahlen (Ergebnislisten von Turnieren) fange ich mit der Platz-Nr an. Jedesmal , wenn ein Sprung kommt (von 9 auf 10 bzw. 99 auf 100 - also die Darstellung der Zahl sich um eine Einheit vergrößert) wird der restliche Text der Zeile um eine Einheit nach rechts verschoben ... Wie kann ich das Unterdrücken von Leerzeichen beim Druck verhindern ?
Grundsätzlich ist es nicht empfehlenswert mit Blanks einzurücken, da dies nur bei Fonts mit fixer Breite funktioniert, z.B. Courier, die sehen deshalb aber auch übel aus ;)
Du kannst aber als erstes Leerzeichen auch chr(255) verwenden, das ist ein Leerzeichen vom Aussehen, aber wird durch alltrim nicht gekürzt.
Lutz Rübe hat geschrieben:2) Hubert, mit deiner Printer Klasse bekomme ich so wie angegeben keinen Zentrierten Druck hin. Ich muß schon selber die zu druckende Text-Länge und die Druckposition bestimmen.
Ich vermute, du hast dich bei den Parametern verzählt ...

oP:PrintText( nPosX, nPosY, cTxt, cAusrichtung, nMaxLen, cArt, nFarbe, nDrehen )
oP:PrintText( nPosInDerGewünschtenMitteX, nPosY, "Mittig","Z") // C, M gehen auch.
So hat es immer funktioniert.

Wenn du ein Beispiel hast, das nicht geht, sende es mir bitte, auch als eMail, aber bitte nur kurze Beispiele.
Lutz Rübe hat geschrieben:3) Wie schaffe ich es, mit der HBPrinterX-Klasse proportionale Schrift zu verwenden und bei Tabellarischer Darstellung (Listen mit Zahlen) sauber untereinander positionierte Zahlen (mit 1.000 Punkt und Komma-Stellen) zu drucken ?
Egal welche Schrift man verwendet, es wird immer mit rechter Ausrichtung gearbeitet, Ziffern sind zwar immer gleich breit, Blanks sind aber schmaler als Ziffern, deshalb geht linksbünding nie bei proportionaler Schrift und Zahlen.

oP:PrintText( nRechteKante, nPosY, Transform(12345.32,"@e 999,999.99"), "R") // wird rechts drucken.
Lutz Rübe hat geschrieben:4) Wie kann ich mit dieser Printer-Klasse einen anderen als den "default" eingestellten Drucker innerhalb des Programmes benutzen.
Entweder man nimmt die HBPrinterDialog-Klasse hinzu, um im laufenden Programm vor dem Ausdruck den Drucker auswählen zu können (siehe die mitgelieferten Beispiele), oder man fragt per XbpPrinter():list() --> aPrinterNames die Namen ab. Wichtig, HBPrinter ist nicht von XbpPrinter abgeleitet, daher geht HBPrinter:list() nicht !
Wenn man den genauen Namen weiß, (so steht er auch im Ordner Drucker) kann man diesen dann oP:create(cPrinterName) der Create Methode als Text übergeben, genauso wie man es bei XbpPrinter:create() tun würde.
Lutz Rübe hat geschrieben:Hubert, ich habe noch nicht alle Funktionen Deiner Printer-Klasse ausprobiert, aber das was ich "im Einsatz" habe erfüllt - mit Ausnahme der og. Punkte - meine Anforderungen.
Du solltest unbedingt überprüfen, ob du die neueste Version hast, denn dort wurden einige Fehler beseitigt und mehr Beispiele beigelegt. Auch ein Studium des Quellcodes kann Verständnisprobleme beseitigen.

Wenn es nicht hilft, weißt du ja dass ich hier zu finden bin ;)
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:

Beitrag von Lutz Rübe »

Hallo Hubert,

klasse und danke für Deine schnelle Antwort. Werde als erstes prüfen, ob ich die aktuelle Version habe (1.3 vom 31.01.2006).

Gruß

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:

Beitrag von Lutz Rübe »

Hallo Hubert,

bis auf den Printer-Dialog hat alles bestens geklappt. Teilweise war ja die Antwort so was von trivial (Zahlenausgabe rechtsbündig), aber ich hätte tage dran gesessen, um an diese Lösungen zu kommen.

Mit dem CHR(255) würde auch funktionieren, aber die rechtsbündige darstellung ist natürlich praktischer, da ich hier auch proportionale schriften verwenden kann. :D

Das mit der Zentrierung funktioniert auch, wenn man weiß, daß man die Position angeben muß um die herum zentriert werden muß und nicht die Druckbreite (Zeilenbreite). Vielleicht kannst Du Deine Doku hier etwas klarer machen ?

Wünsche noch ein schönes Wochenende...

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

Beitrag von brandelh »

Hallo Lutz,

ich werde das genauer schreiben. Ich danchte es ist klar, dass

linksbündig = linker Wortrand,
rechtsbündig = rechter Wortrand,
zentriert = mitte des Wortes

aber man vergisst, dass andere das auch anders sehen können ;)

Was hat eigentlich beim Printerdialog nicht funktioniert ?

Es ist wirklich sinnvoll, alle Methoden und Beispiele im Quellcode
anzusehen, es sind schon eine Menge zusammengekommen.
Viele braucht man ja später nicht unbedingt oder sind intern,
dennoch wird dann manches klarer.
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:

Beitrag von Lutz Rübe »

Hallo Hubert,

:)
linksbündig, rechtsbündig, zentriert, blocksatz... das sind alles selbsterklärende begriffe..... aber irgendwie habe ich hatte gerade beim zentrierten Ausdruck irgendwie die (verfügbare/mögliche) druckbreite als den bereich gesehen, innerhalb des zentriert werden soll. das es sich bei der positionsangabe um den punkt handelt, UM DEM HERUM zentriert werden soll, war mir nicht ganz klar.

aber jetzt habe ich es begriffen - dank deiner hilfe.

was den printing-dialog angeht, bin ich in der objektorientierten programmierung noch ein neuling und ich habe das mit den objekten, vererbung etc. noch nicht so richtig kapiert. der printing dialog muß doch nach der erstellung des drucker-objektes erfolgen ? warum betitelst du die objekte mal als oHBPrinter und mal als MyHBPrinter ? und welche Klassen und Methoden benötige ich für den printing-dialog ?

ich glaube, ich muß mir deine test2.exe noch einmal vornehmen....

aber der printing-dialog ist für meine aufgabe derzeit nur zweitrangig.

schönes wochenende noch
Lutz
Antworten