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?
Wie Textposition im TextGadget feststellen?
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Textposition im TextGadget feststellen?
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
Re: Wie Textposition im TextGadget feststellen?
Oder mit Simpler Methode :
Und schon hast Du komplette Breite und Höhe des gewünschten Textes wenn ein bestimmter Zeichensatz an ist ...
Simpel aber Funktion
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
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Textposition im TextGadget feststellen?
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?
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
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Textposition im TextGadget feststellen?
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?
beispiel aus dem codearchiv:
vielleicht hilft ja das
lg kevin
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
lg kevin



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen