[erledigt] Stringlänge und -höhe berechnen ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[erledigt] Stringlänge und -höhe berechnen ?

Beitrag 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
Zuletzt geändert von scholly am 21.04.2008 23:18, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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? :freak:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

:oops:
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten