Seite 1 von 1

Textlänge eines gegebenen Texts in Pixeln errechnen ?

Verfasst: 16.08.2015 22:34
von TWELVE
ich versuche, den Text eines FrameGadgets an die jeweilige Window Größe anzupassen, sprich den Text gegebenfalls abzuschneiden,
damit er nicht über das im FrameGadget verfügbare Maß an Pixeln / Zeichen hinausgeht.

Bis jetzt ist mein Ansatz, aus Breite des FrameGadgets und dem Text ein Ratio zu errechnen, bei Unterschreitung eines festgelegten
Ratios wird der Text auf das festgelegte Ratio beschnitten.

Das funktioniert, aber aufgrund des proportionalen Fonts ist das Ergebnis nicht exakt.

Ich kann zwar mit TextWidth(Text.s) aus der 2DDrawing die exakte Breite in Pixeln errechnen, die der aktuelle Text benötigt,
aber wie errechne ich, wieviel Zeichen ich abschneiden muß, damit der Text die gewünschte Anzahl Pixel nicht überschreitet ?

Aktuell könnte ich mir nur eine Iteration in einer Schleife vorstellen, also sprich ich nehme pro Durchlauf ein Zeichen weg
und dann teste ich, wieviele Pixel der Text dann hat.

Gibts nicht irgendwie was schnelleres / einfacheres / besseres ?

Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?

Verfasst: 17.08.2015 08:14
von Bisonte
Oder man nimmt einen Zeichensatz, indem alle Zeichen die gleiche Breite haben.... ;)

Nein, im Ernst, da kann man nur schätzen. Sprich : Man hat die max. Anzahl der Pixel die nicht überschritten werden dürfen,
Dann errechnet man wieviele Buchstaben bei der Zeichensatzgrösse reinpassen "könnten", danach Text abschneiden und schauen
ob er passt, wenn immer noch zu breit, dann nach deiner Schleifentheorie abstückeln.

Würde ich jetzt mit der Hausfrauenlogik antworten ;)

Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?

Verfasst: 17.08.2015 10:41
von BI2
Hallo TWELVE,

schau Dir das mal an:

http://www.purebasic.fr/german/viewtopi ... =8&t=17344

wenn Du das ein wenig umbastelst (unsichtbares Image als Ausgabekanal) dürfte das die Lösung zu Deinem Problem sein.

Gruß, BI2

Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?

Verfasst: 17.08.2015 10:52
von alter Mann

Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?

Verfasst: 17.08.2015 10:55
von BI2
schnell gebastelt (CrossPlatform):

Code: Alles auswählen

EnableExplicit

Procedure.s ZeilenSchnitt(Text$, Breite.i, Font.i)

	Protected Image.i = CreateImage(#PB_Any, 1, 1)
	
	StartDrawing(ImageOutput(Image))
	
	DrawingFont(FontID(Font))
	
	While TextWidth(Text$) > Breite
		Text$ = Left(Text$, Len(Text$) - 1)
	Wend
	
	StopDrawing()
	
	FreeImage(Image)

	ProcedureReturn Text$

EndProcedure
;==================================================================================================

Define Font.i = LoadFont(#PB_Any, "Arial", 20)

Debug ZeilenSchnitt("Das ist ein Testtext zum abschneiden", 50, Font)
Gruß, BI2

Edit: FreeImage sollte man nicht vergessen :wink: