Wie Textposition im TextGadget feststellen?

Anfängerfragen zum Programmieren mit PureBasic.
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Wie Textposition im TextGadget feststellen?

Beitrag 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?
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Wie Textposition im TextGadget feststellen?

Beitrag von c4s »

Guck dir folgendes aus dem englischen Forum mal an: http://www.purebasic.fr/english/viewtop ... 12&t=35090
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Wie Textposition im TextGadget feststellen?

Beitrag 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 ;)
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​​
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Re: Wie Textposition im TextGadget feststellen?

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

Re: Wie Textposition im TextGadget feststellen?

Beitrag von Bisonte »

Zur Hilfe könntest Du vielleicht ein Bild zeigen, wie Du Dir das vorstellst....
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​​
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Re: Wie Textposition im TextGadget feststellen?

Beitrag 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.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Wie Textposition im TextGadget feststellen?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Antworten