Seite 1 von 1

Wie Textposition im TextGadget feststellen?

Verfasst: 01.09.2010 07:29
von Syntacks_Error
Ich gebe Text in einem Textgadget innerhalb einer Scrollarea aus. Die Abschnitte des Texts möchte ich durch Trennlininien o.a. kenzeichnen, wozu mir eine Grafik vorschwebt (Eine farbige Textlinie aus z.B. Leerzeichen geht wohl nicht, ausweislich der Hilfe kann PB so etwas nicht, auch wäre das etwas mickrig). Für die Grafik brauche ich die Position in Pixel, bei der der Textabschnitt aufhört. Wie finde ich die heraus? Meine 1. Idee war, "Zeilenanzahl * Schriftgroeße * irgendwas", aber das funktioniert wohl nicht, weil keine eindeutige Relation zwischen Schriftgröße (Punkte) und Pixelhöhe besteht.

Überhaupt: Um zu wissen, wie groß das Textgadget sein muß, muß ich doch wissen, wieviel Platz der Text braucht. Gibt es da keine Funktion für?

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 01.09.2010 10:06
von c4s
Guck dir folgendes aus dem englischen Forum mal an: http://www.purebasic.fr/english/viewtop ... 12&t=35090

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 01.09.2010 14:14
von Bisonte
Oder mit Simpler Methode :

Code: Alles auswählen

Font = LoadFont(#PB_Any,"Arial",12,#PB_Font_Bold)

Dummy = CreateImage(#PB_Any,20,20)

Text.s = "Hier ist dein zu messender Text"

StartDrawing(ImageOutput(Dummy))

  DrawingFont(FontID(Font))

  hoehe  = TextHeight(Text)
  breite = TextWidth(Text)

StopDrawing()

FreeImage(Dummy)


Und schon hast Du komplette Breite und Höhe des gewünschten Textes wenn ein bestimmter Zeichensatz an ist ...

Simpel aber Funktion ;)

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 01.09.2010 18:39
von Syntacks_Error
Interessante Idee. Jetzt muß ich nur noch feststellen, ob es eine feste Beziehung zwischen Texthöhe und Zeilenhöhe gibt (oder das das selbe ist), das erste Programmbeispiel ist da für mich nicht gerade durchsichtig ...

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 02.09.2010 12:46
von Bisonte
Zur Hilfe könntest Du vielleicht ein Bild zeigen, wie Du Dir das vorstellst....

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 04.09.2010 11:56
von Syntacks_Error
Klappt nicht. Das gibt zwar die Höhe des Textes in Pixel, aber es gibt da wohl keine genaue Beziehung zwischen dieser Höhe und der Höhe eine Textzeile im Gadget, jedenfalls verrutscht das nach mehreren Zeilen immer mehr. So ungefähr scheint es Texthöhe * 1, 25 zu sein, aber ein genauer Wert ist nicht zu finden.

Re: Wie Textposition im TextGadget feststellen?

Verfasst: 04.09.2010 14:45
von CSHW89
beispiel aus dem codearchiv:

Code: Alles auswählen

; German forum:
; Author: GPI (updated for PB4.00 by blbltheworm)
; Date: 31. May 2003
; OS: Windows
; Demo: No


; Get the "real" height of an used font (in this example Arial/16 will have a real height of 24)

;see the example, how to get the hdc 
Procedure GetTextHeight(hdc) 
  tm.textmetric 
  PrevMapMode=SetMapMode_(hdc,#MM_TEXT) 
  GetTextMetrics_(hdc,tm) 
  If PrevMapMode 
    SetMapMode_(hdc,PrevMapMode) 
  EndIf 
  ProcedureReturn tm\tmHeight 
EndProcedure 


LoadFont(0,"Arial",16) 

CreateImage(0,100,100) 

hdc=StartDrawing(ImageOutput(0)) ; start drawing and get the HDC 

DrawingFont(FontID(0)) ; Use the own font 

Height=GetTextHeight(hdc) ; how big it is 

;draw a text with a pixel-line between the text 
DrawText(1,1,"XYZ") 
DrawText(1,1+Height+1,"abc") 

StopDrawing() 

FreeFont(0) 


;display it 

OpenWindow(0,0,0,100,100,"TEST",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(0)) 
ImageGadget(0,0,0,100,100,ImageID(0)) 
Repeat 
Until WaitWindowEvent()=#PB_Event_CloseWindow 

End 
vielleicht hilft ja das
lg kevin