Textlänge eines gegebenen Texts in Pixeln errechnen ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
TWELVE
Beiträge: 72
Registriert: 01.04.2007 18:33

Textlänge eines gegebenen Texts in Pixeln errechnen ?

Beitrag 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 ?
Benutzeravatar
Bisonte
Beiträge: 2474
Registriert: 01.04.2007 20:18

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

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
BI2
Beiträge: 146
Registriert: 26.11.2006 19:07

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

Beitrag 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
PB 5.7x (x64), LinuxMint 18.3 - Xfce (x64)

Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

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

Beitrag von alter Mann »

Win11 64Bit / PB 6.0
Benutzeravatar
BI2
Beiträge: 146
Registriert: 26.11.2006 19:07

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

Beitrag 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:
PB 5.7x (x64), LinuxMint 18.3 - Xfce (x64)

Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
Antworten