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

Code: Alles auswählen

 X + TextWidth("dieser Satzteil ist fettgedruck")
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