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 ?
Textlänge eines gegebenen Texts in Pixeln errechnen ?
Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?
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
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
Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?
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
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
Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?
nur Windows: GetTextExtentExPoint_
Win11 64Bit / PB 6.0
Re: Textlänge eines gegebenen Texts in Pixeln errechnen ?
schnell gebastelt (CrossPlatform):
Gruß, BI2
Edit: FreeImage sollte man nicht vergessen
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)
Edit: FreeImage sollte man nicht vergessen
PB 5.7x (x64), LinuxMint 18.3 - Xfce (x64)
Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung