Drucken einer Textzeile mit und ohne Fettdruck

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag von dysti »

Hallo ihr Beiden,
wo kommen die 0.8 her. Ist das ein fester Wert oder geschätzt?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Drucken einer Textzeile mit und ohne Fettdruck

Beitrag 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
a²+b²=mc²
Antworten