Umsetzung einer Fonteinstellung von Clipper zu XBase
Moderator: Moderatoren
- uwe.24
- UDF-Programmierer
- Beiträge: 52
- Registriert: Di, 01. Aug 2006 15:47
- Wohnort: Osnabrück
- Danksagung erhalten: 1 Mal
Umsetzung einer Fonteinstellung von Clipper zu XBase
Hallo.
Ich versuche nun schon länger Zeit einige alte Programme in die XBase++ Welt zu bekommen. Mit vielen Erfolgen.
Darunter hab ich auch einige Druckroutinen. Manches dabei hab ich auch schon mit Hilfe der HBPrinter Klasse gut geschafft. =D>
Jetzt möchte ich einen Ausdruck einer Betriebsanweisung mit möglichst gut lesbaren, großen Buchstaben umstellen.
Früher hab ich das mit PCL Sequencen unter DOS auf LPT1 Druckern gemacht.
Für das Beispiel z.B. Esc (s10H für 10 cpi Schriftbreite und Esc (s24V für 24cpi Schrifthöhe als Großschrift.
Das sah dann so aus: Das ist eine DINA4 Breite mit 80 Zeichen auf insgesamt 40 Zeilen.
Ich muss also 80 Zeichen in 40 Zeilen mit nicht proportionalen Zeichen mögichst formatfüllend auf DIN A 4 darstellen.
Jetzt möchte ich das entweder mit dem HBPrinter oder über Express++ lösen.
Hab schon einiges mit veschiedenen Fonts und :height bei den xbpfont() Einstellung probiert, aber keinen Erfolg gehabt.
Kann mir da bitte jemand Hilfestellung geben?
Uwe aus OS
Ich versuche nun schon länger Zeit einige alte Programme in die XBase++ Welt zu bekommen. Mit vielen Erfolgen.
Darunter hab ich auch einige Druckroutinen. Manches dabei hab ich auch schon mit Hilfe der HBPrinter Klasse gut geschafft. =D>
Jetzt möchte ich einen Ausdruck einer Betriebsanweisung mit möglichst gut lesbaren, großen Buchstaben umstellen.
Früher hab ich das mit PCL Sequencen unter DOS auf LPT1 Druckern gemacht.
Für das Beispiel z.B. Esc (s10H für 10 cpi Schriftbreite und Esc (s24V für 24cpi Schrifthöhe als Großschrift.
Das sah dann so aus: Das ist eine DINA4 Breite mit 80 Zeichen auf insgesamt 40 Zeilen.
Ich muss also 80 Zeichen in 40 Zeilen mit nicht proportionalen Zeichen mögichst formatfüllend auf DIN A 4 darstellen.
Jetzt möchte ich das entweder mit dem HBPrinter oder über Express++ lösen.
Hab schon einiges mit veschiedenen Fonts und :height bei den xbpfont() Einstellung probiert, aber keinen Erfolg gehabt.
Kann mir da bitte jemand Hilfestellung geben?
Uwe aus OS
Uwe aus OS
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Schau dir mal die HBPrinter:SAY() Methode an, mit der kannst du genau positionieren wie früher unter Clipper (1,1 = linkes oberes Zeichen).
80 Zeichen auf 40 Linien, also brauchst du Querformat.
Als Zeichensatz empfiehlt sich z.B. Courier New, aber auch andere können das.
Ein Font Objekt kann ja Breite und Höhe vorgeben statt der Point Größe, da musst du experimentieren (am Besten mit Word die verschiedenen Größen prüfen, vielleicht passt ja eine).
80 Zeichen auf 40 Linien, also brauchst du Querformat.
Als Zeichensatz empfiehlt sich z.B. Courier New, aber auch andere können das.
Ein Font Objekt kann ja Breite und Höhe vorgeben statt der Point Größe, da musst du experimentieren (am Besten mit Word die verschiedenen Größen prüfen, vielleicht passt ja eine).
Gruß
Hubert
Hubert
- uwe.24
- UDF-Programmierer
- Beiträge: 52
- Registriert: Di, 01. Aug 2006 15:47
- Wohnort: Osnabrück
- Danksagung erhalten: 1 Mal
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Hallo Hubert.
Danke für die Antwort.
Das mit HBPrinter:SAY() ist schon klar und damit arbeite ich auch.
Ich brauche aber eigentlicht doppelt hohe Zeichen.
Ein Zeichen ist bis jetzt etwa 6mm hoch und 2,5 mm breit
Damit kommnt man dann bei DINA4 hochkant auf 80 Zeichen x 40 Zeilen (+- mit Rand).
Die 'unnormale' Zeichenhöhe ist mein Problem.
Uwe aus OS
Danke für die Antwort.
Das mit HBPrinter:SAY() ist schon klar und damit arbeite ich auch.
Ich brauche aber eigentlicht doppelt hohe Zeichen.
Ein Zeichen ist bis jetzt etwa 6mm hoch und 2,5 mm breit
Damit kommnt man dann bei DINA4 hochkant auf 80 Zeichen x 40 Zeilen (+- mit Rand).
Die 'unnormale' Zeichenhöhe ist mein Problem.
Uwe aus OS
Uwe aus OS
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Du kannst einen Font komplett selbst zusammenstellen (also FontFamilie, Höhe und Breite):
Du kannst z.B. erst einen normalen "10.Courier New" erstellen, dann :height und :widht ermitteln und danach einen mit doppelter Höhe
Nicht alle Kombinationen werden exakt umgesetzt, es kann auch eine 'ähnliche' Schrift gewählt werden, einfach probieren.
Bei Courier New, Arial (warum nicht, solange alle Spalten einzeln geschrieben werden) etc. sollten die Ergebnisse auf anderen Rechnern gleich bzw. ähnlich sein.
Code: Alles auswählen
oFont := xbpFont():new()
oFont:familyName := "Courier New"
oFont:fixed := .t.
oFont:height := ? // je nach Einstellung z.B. 1/10mm # POINTs
oFont:width := ? // je nach Einstellung z.B. 1/10mm # POINTs
oFont:create()
Nicht alle Kombinationen werden exakt umgesetzt, es kann auch eine 'ähnliche' Schrift gewählt werden, einfach probieren.
Bei Courier New, Arial (warum nicht, solange alle Spalten einzeln geschrieben werden) etc. sollten die Ergebnisse auf anderen Rechnern gleich bzw. ähnlich sein.
Gruß
Hubert
Hubert
- uwe.24
- UDF-Programmierer
- Beiträge: 52
- Registriert: Di, 01. Aug 2006 15:47
- Wohnort: Osnabrück
- Danksagung erhalten: 1 Mal
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Hallo Hubert,
kannst du mir da nochmal auf die Sprünge helfen?
Mein Code in einem Testprogramm sieht an der Stelle so aus:
Wo und wie muss ich jetzt die Schriftart auf eine größere Höhe anpassen?
Dank im voraus.
Uwe aus OS
kannst du mir da nochmal auf die Sprünge helfen?
Mein Code in einem Testprogramm sieht an der Stelle so aus:
Code: Alles auswählen
begin sequence
oDlg := XbpPrintDialog():new()
oDlg:enablePrintToFile := .f.
oDlg:printToFile := .f.
oDlg:create()
nZeileMax = nZeile
oXbpPrinter := oDlg:display()
oDlg:destroy()
oHBPrinter := HBPrinter():New(oXbpPrinter):create()
oHBPrinter:addFont({"Courier New",14,.t.,.f.})
oHBPrinter:SetFont(1)
oHBPrinter:StartDoc()
Dank im voraus.
Uwe aus OS
Uwe aus OS
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Hi,
zunächst solltest du hier prüfen ob der XbpPrinterDialog() eventuell NIL zurückgegeben hat.
Das wird zwar keinen Fehler geben, da HbPrinter dann den Standarddrucker nutzt, aber der Anwender wollte eigentlich den Druck abbrechen:
mit dieser Anweisung legst du die Schriftart und Standard-Punktgröße fest (hier 14, bold, normal also nicht kursiv):
wenn du etwas anderes als den Standard willst, musst du ein Fontobjekt mit XbpFont() erstellen, dort kannst du dann die Höhe und Breite frei festlegen, ob es genauso erstellt wird, ist nicht garantiert.
Dieses so erzeugte Font Objekt kannst du dann auch :addFont() übergeben.
wie gesagt, damit muss man experimentieren um zu sehen wie es aussieht.
Das gute daran ist, dass ein Standardfont wie Courier New oder Arial oder Times auf allen Windowsrechnern gleich aussieht (oder zumindest aussehen sollte )
zunächst solltest du hier prüfen ob der XbpPrinterDialog() eventuell NIL zurückgegeben hat.
Das wird zwar keinen Fehler geben, da HbPrinter dann den Standarddrucker nutzt, aber der Anwender wollte eigentlich den Druck abbrechen:
Code: Alles auswählen
oXbpPrinter := oDlg:display()
oDlg:destroy()
if ! empty(oXbpPrinter) // oder # NIL etc.
oHBPrinter := HBPrinter():New(oXbpPrinter):create()
Code: Alles auswählen
oHBPrinter:addFont({"Courier New",14,.t.,.f.})
Dieses so erzeugte Font Objekt kannst du dann auch :addFont() übergeben.
Code: Alles auswählen
so sieht die Methode aus ...
*-------------------------------------------------------------
METHOD _HBPrinter:AddFont(uFont)
local oFont := NIL
do case
case valtype(uFont) = "C"
oFont := XbpFont():new(::oPS):create(uFont)
case valtype(uFont) = "O"
oFont := uFont
case valtype(uFont) = "A"
do while len(uFont) < 4
aadd(uFont, NIL )
enddo
oFont := FontWahl( uFont[1], uFont[2], uFont[3],uFont[4], ::oPS )
// FontWahl( cFontName, nFontHoehe, lBold, lItalic)
end case
aadd(::aFontList,oFont)
return self
... so kannst du einen eigenen Font anpassen und verwenden
oFont := XbpFont():new(oHBPrinter:oPS) // Font-Objekt für diesen Drucker erstellen
oFont:familyName := "Courier New"
oFont:bold := .t.
oFont:fixed := .t. // sicher ist sicher, eventuell unnötig bei Courier New
oFont:height := 60 // 6mm bei meiner HBPrinter Vorgabe GRA_PU_LOMETRIC
// wenn du nicht die Standardbreite willst, kannst du dies so vorgeben, die Schrift könnte aber "gestaucht" wirken !
oFont:width := 40 // 4mm bei meiner HBPrinter Vorgabe GRA_PU_LOMETRIC
// so wird die Standardbreite zur obigen Höhe verwendet, was meist schöner aussieht.
oFont:width := 0
oFont:create()
oHBPrinter:addFont(oFont)
Das gute daran ist, dass ein Standardfont wie Courier New oder Arial oder Times auf allen Windowsrechnern gleich aussieht (oder zumindest aussehen sollte )
Gruß
Hubert
Hubert
- uwe.24
- UDF-Programmierer
- Beiträge: 52
- Registriert: Di, 01. Aug 2006 15:47
- Wohnort: Osnabrück
- Danksagung erhalten: 1 Mal
Re: Umsetzung einer Fonteinstellung von Clipper zu XBase
Hallo Hubert.
Suuuuuper. =D>
Jetzt hab ich es geschafft.
Kaum weiß man wie es geht, schon klappt es
Vielen Dank.
Uwe aus OS
Suuuuuper. =D>
Jetzt hab ich es geschafft.
Kaum weiß man wie es geht, schon klappt es
Vielen Dank.
Uwe aus OS
Uwe aus OS