Seite 1 von 1
[erledigt] Stringlänge und -höhe berechnen ?
Verfasst: 26.12.2005 21:06
von scholly
moin, moin...
Beim Zusammenbasteln einer GUI bin ich auf das Problem gestoßen, daß ich zur genauen Positionierung und Größenbestimmung eine Gadgets (Text, String, Button) die "Ausmaße" des Strings benötige.
Gefunden haben ich allerdings nur "TextLength", daß zum 2D-Bereich gehört und ohne "drawing-object" nicht funktioniert.
Gibts was anderes, das mir weiterhilt ? (BS-unabhängig bevorzugt )
bis denne...
scholly
Verfasst: 26.12.2005 21:14
von Macros
Ich nehme an, dass du vorher eine schrift reinlädst.
Dann gibst du ja beim Laden die Höhe an, und die Länge
must du wie du gesagt hast über 2D-Drawing ermitteln.
Verfasst: 26.12.2005 21:14
von DarkDragon
Macros hat geschrieben:Ich nehme an, dass du vorher eine schrift reinlädst.
Dann gibst du ja beim Laden die Höhe an, und die Länge
must du wie du gesagt hast über 2D-Drawing ermitteln.
Ähm das wäre die Punkthöhe, nicht die Pixelhöhe. Außerdem: was ist wenn er keinen Font lädt? Stirbt er dann?

Verfasst: 26.12.2005 21:18
von Macros
Verfasst: 26.12.2005 21:49
von scholly
@DarkDragon
Ich hab von Dir das hier aufgestöbert:
http://forums.purebasic.com/german/view ... nge+h%F6he
Allerdings steh ich davor wie der Ox vorm Berg.
Kannst Du das so ändern, daß ich _OHNE_ ein Bild zu sehen, für einen beliebigen Text Länge und Höhe bekomme ?
bittebittebitte
scholly
Verfasst: 26.12.2005 21:54
von DarkDragon
Code: Alles auswählen
Procedure GetFontHeight(FontID, PtSize)
PtSize * 1.5
Img = CreateImage(#PB_Any, PtSize, PtSize)
StartDrawing(ImageOutput())
DrawingFont(FontID)
Len = TextLength("Mgjf")
StopDrawing()
ResizeImage(Img, PtSize, Len)
StartDrawing(ImageOutput())
DrawingFont(FontID)
Box(0, 0, PtSize, TextLength("Mgjf"), $FFFFFF)
Locate(0, 0)
DrawText("Mgjf")
For x=0 To PtSize-1
For y=0 To PtSize-1
Color = Point(x, y)
If Color = $000000
If y < MinY : MinY = y : EndIf
If y > MaxY : MaxY = y : EndIf
EndIf
Next
Next
StopDrawing()
;ViewImage()
FreeImage(Img)
ProcedureReturn MaxY-MinY
EndProcedure
LoadFont(0, "Times New Roman", 70)
MessageRequester("", Str(GetFontHeight(FontID(), 70)))
CloseFont(0)
Aber es gibt noch eine andere, bessere Lösung, finde sie aber gerade nicht.