Seite 1 von 2
Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 29.11.2012 10:43
von dysti
Hallo,
habe folgendes Problem: die untenstehende Zeile möchte ich so ausdrucken:
Dieser Satzteil ist normal, dieser Satzteil ist fettgedruck, das ist nun wieder normal.
Optimal wäre es, den mittleren Satzteil in einer größeren Schriftart darzustellen.
Drawtext hat ja den x und y - Parameter. Man müßte höchstwahrscheinlich die Zeichenbreite ermitteln und addieren.
Aber da blieb ich schon stecken.
Hat jemand eine Idee, wie man den Satz formatiert ausdrucken kann?
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 29.11.2012 11:41
von STARGÅTE
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Font_Normal
#Font_Bold
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
LoadFont(#Font_Normal, "Arial", 12)
LoadFont(#Font_Bold, "Arial", 12, #PB_Font_Bold)
Define X.i = 10, Y.i = 10
If StartDrawing(CanvasOutput(#Gadget))
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($000000)
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y, "Dieser Satzteil ist normal, ")
X + TextWidth("Dieser Satzteil ist normal, ")
DrawingFont(FontID(#Font_Bold))
DrawText(X, Y, "dieser Satzteil ist fettgedruck")
X + TextWidth("dieser Satzteil ist fettgedruck")
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y, ", das ist nun wieder normal.")
StopDrawing()
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Natürlich kannst du das auch "automatisieren", indem du zB Signalzeichen benutzt, nach denen du suchst, ähnlich wie im Wikipedia-Syntax:
"Dieser Satzteil ist normal, #dieser Satzteil ist fettgedruck#, das ist nun wieder normal."
Hier kannst du dann an den # teilen und entsprechend die Font wählen.
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 10:54
von dysti
Hallo STARGÅTE,
Toll. Leider wird das Fettgedruckte bei Schriftgrad 48 nicht auf einer Zeile gedruckt.
Meine, die untere Hälfte der Schrift endet eine halbe Zeile tiefer sie überschreitet die Schriftgrundlinie nach unten.
Nun möchte ich aber auf der Grundlinie einer Zeile drucken.
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Font_Normal
#Font_Bold
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
LoadFont(#Font_Normal, "Arial", 12)
LoadFont(#Font_Bold, "Arial", 48, #PB_Font_Bold)
Define X.i = 10, Y.i = 10
If StartDrawing(CanvasOutput(#Gadget))
; PrintRequester()
; StartPrinting("test")
; If StartDrawing(PrinterOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($000000)
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y, "Dieser Satzteil ist normal, ")
X + TextWidth("Dieser Satzteil ist normal, ")
DrawingFont(FontID(#Font_Bold))
DrawText(X, Y, "dieser Satzteil ist fettgedruck")
X + TextWidth("dieser Satzteil ist fettgedruck")
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y, ", das ist nun wieder normal.")
StopDrawing()
; StopPrinting()
EndIf
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 12:39
von STARGÅTE
Ok, dann musst du die Y-Position ebenfalls anpassen.
Hier ist es schwer die Lage der Grundlinie zu finden, bei dieser Schrift etwa bei 80% von TextHeight:
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Font_Normal
#Font_Bold
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
LoadFont(#Font_Normal, "Arial", 12)
LoadFont(#Font_Bold, "Arial", 48, #PB_Font_Bold)
Define X.i = 10, Y.i = 70
If StartDrawing(CanvasOutput(#Gadget))
; PrintRequester()
; StartPrinting("test")
; If StartDrawing(PrinterOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($000000)
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, "Dieser Satzteil ist normal, ")
X + TextWidth("Dieser Satzteil ist normal, ")
DrawingFont(FontID(#Font_Bold))
DrawText(X, Y-TextHeight(" ")*0.8, "dieser Satzteil ist fettgedruck")
X + TextWidth("dieser Satzteil ist fettgedruck")
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, ", das ist nun wieder normal.")
StopDrawing()
; StopPrinting()
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 13:33
von Waldixxl
Hallo
man könnte auch die Rückgabe von DrawText nutzen,
Code: Alles auswählen
X + DrawText(X, Y-TextHeight(" ")*0.8, "Dieser Satzteil ist normal, ")
und sich so die nächste Zeile sparen
Walter
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 13:42
von dysti
Hallo ihr Beiden,
wo kommen die 0.8 her. Ist das ein fester Wert oder geschätzt?
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 13:54
von Waldixxl
Hallo dysti
Die kommen von STARGÅTE
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Font_Normal
#Font_Bold
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
LoadFont(#Font_Normal, "Arial", 12)
LoadFont(#Font_Bold, "Arial", 48, #PB_Font_Bold)
Define X.i = 10, Y.i = 70
If StartDrawing(CanvasOutput(#Gadget))
; PrintRequester()
; StartPrinting("test")
; If StartDrawing(PrinterOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($000000)
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, "Dieser Satzteil ist normal, ")
X + TextWidth("Dieser Satzteil ist normal, ")
DrawingFont(FontID(#Font_Bold))
DrawText(X, Y-TextHeight(" ")*0.8, "dieser Satzteil ist fettgedruck")
X + TextWidth("dieser Satzteil ist fettgedruck")
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, ", das ist nun wieder normal.")
StopDrawing()
; StopPrinting()
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Walter
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 02.12.2012 14:06
von STARGÅTE
Um mich mal selbst zu zitieren:
STARGÅTE hat geschrieben:[...]die Lage der Grundlinie zu finden, bei dieser Schrift etwa bei 80% von TextHeight
TextHeight() gibt in PureBasic den Abstand von k- zur p-Linie zurück (
Liniensystem (Typografie)), und das auch nur in etwa. Damit man also die Lage der Grundlinie bekommt, muss man nur das Verhältnis k-Line zu Grundlinie nutzen, was bei dieser Schrift etwa bei 0.8 (80%) liegt, andere Schriften, können diese bei 70% oder 90% haben. Würde man immer die komplette TextHeight abziehen, würde alles auf der p-Line ausgerichtet sein, also an der unterkante von Buchstaben wie j, p, q, y
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 03.12.2012 15:22
von dysti
...... muß ich also bei Verwendung einer anderen Schriftart das Verhältnis durch probieren selbst herausfinden.
Nun ja, wenn ich den Text ausdrucke, ist er ziemlich klein.
Es gibt also Unterschiede, ob ich den Text am Bildschirm anzeige oder ausdrucke.
Nun habe ich das Listing abgeändert. Nun druckt er zwar fett und richtig auf den Drucker (Schriftgröße normal),
aber keine größere Schriftart. Warum?
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Font_Normal
#Font_Bold
EndEnumeration
ypos = PrinterPageWidth() ; 7016
xpos = PrinterPageHeight() ; 4958
;OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
;CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
LoadFont(#Font_Normal, "Arial",((xpos / 1024) * 12))
LoadFont(#Font_Bold, "Arial",((xpos / 1024) * 24), #PB_Font_Bold)
Define X.i = 10, Y.i = 70
; If StartDrawing(CanvasOutput(#Gadget))
PrintRequester()
StartPrinting("test")
If StartDrawing(PrinterOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($000000)
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, "Dieser Satzteil ist normal, ")
X + TextWidth("Dieser Satzteil ist normal, ")
DrawingFont(FontID(#Font_Bold))
DrawText(X, Y-TextHeight(" ")*0.8, "dieser Satzteil ist fettgedruck")
X + TextWidth("dieser Satzteil ist fettgedruck")
DrawingFont(FontID(#Font_Normal))
DrawText(X, Y-TextHeight(" ")*0.8, ", das ist nun wieder normal.")
DrawingFont(FontID(#Font_Bold))
DrawText(10, Y+100-TextHeight(" ")*0.8, "Diese Zeile sollte fettgedruckt und eine größere Schriftart haben.")
StopDrawing()
StopPrinting()
EndIf
;Repeat
; Select WaitWindowEvent()
; Case #PB_Event_CloseWindow
; End
; EndSelect
;ForEver
Re: Drucken einer Textzeile mit und ohne Fettdruck
Verfasst: 03.12.2012 15:55
von Kiffi
dysti hat geschrieben:Nun druckt er zwar fett und richtig auf den Drucker (Schriftgröße normal),
aber keine größere Schriftart. Warum?
wenn Du eine größere Schriftart haben möchtest, musst Du sie
IMHO auch angeben:
Code: Alles auswählen
LoadFont(#Font_Bold2, "Arial", 128, #PB_Font_Bold) ; ziemlich grosssss...
[...]
DrawingFont(FontID(#Font_Bold2))
DrawText(10, Y+100-TextHeight(" ")*0.8, "Diese Zeile sollte fettgedruckt und eine größere Schriftart haben.")
Grüße ... Kiffi