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
Führende Leerzeichen mit HBPrinterX-Klasse
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Führende Leerzeichen mit HBPrinterX-Klasse
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.
Du kannst aber als erstes Leerzeichen auch chr(255) verwenden, das ist ein Leerzeichen vom Aussehen, aber wird durch alltrim nicht gekürzt.
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.
oP:PrintText( nRechteKante, nPosY, Transform(12345.32,"@e 999,999.99"), "R") // wird rechts drucken.
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.
Wenn es nicht hilft, weißt du ja dass ich hier zu finden bin
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.
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 ausLutz 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 ?
Du kannst aber als erstes Leerzeichen auch chr(255) verwenden, das ist ein Leerzeichen vom Aussehen, aber wird durch alltrim nicht gekürzt.
Ich vermute, du hast dich bei den Parametern verzählt ...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.
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.
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.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 ?
oP:PrintText( nRechteKante, nPosY, Transform(12345.32,"@e 999,999.99"), "R") // wird rechts drucken.
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 !Lutz Rübe hat geschrieben:4) Wie kann ich mit dieser Printer-Klasse einen anderen als den "default" eingestellten Drucker innerhalb des Programmes benutzen.
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.
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.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.
Wenn es nicht hilft, weißt du ja dass ich hier zu finden bin
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:
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.
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
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.
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
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
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.
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
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:
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
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