German Labeltext zeilenweise ermitteln

Petrus

Member
Licensed User
Longtime User
Wenn ein langer Text in einem Label angezeigt wird, wird er ja automatisch umgebrochen. Kann ich z.B. ermitteln, welcher Text in Zeile 3 steht?

Gruß
Petrus
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Petrus,

innerhalb der StringUtils gibt es die Methode MeasureMultilineTextHeight mit der man die notwendige Höhe eines Labels bestimmen kann, um den kompletten Text (mit Zeilenumbrüchen) darzustellen.

Ich habe mal ein wenig herumgespielt und mit Hilfe dieser Information eine Sub getTextFromLabelLine erstellt. Man übergibt das Label und die gewünschte Zeile. Sofern übergebene die Zeile nicht existiert, erhält man einen Leerstring ("") zurück:
B4X:
Sub getTextFromLabelLine(lbl As Label, line As Int) As String
    If line < 1 Then
        Return ""
    End If
  
    Dim su As StringUtils
    Dim labelText As String
    Dim oldTextHigh, newTextHigh As Int
    Dim textStart, textEnd As Int
    Dim textLine As Int
    Dim i, j As Int
  
    labelText = lbl.text
    oldTextHigh = 0
    textEnd = labelText.Length
    textStart = textEnd
    textLine = 0
    i = -1
  
    Do While i < labelText.Length
        i = i + 1
        j = i
        Do While (i < labelText.Length) AND (labelText.CharAt(i) <> " ")
            i = i + 1
        Loop
        newTextHigh = su.MeasureMultilineTextHeight(lbl, labelText.SubString2(0, i))
        If  newTextHigh > oldTextHigh Then
            oldTextHigh = newTextHigh
            textLine = textLine + 1
            If textLine = line Then
                textStart = j
            End If
            If textLine > line Then
                textEnd = j
                Exit
            End If          
        End If
    Loop
  
    Return labelText.SubString2(textStart, textEnd)
End Sub

Du benötigst, wie gesagt, die StringUtils in Deinem Projekt.


Gruß
specci48
 

Petrus

Member
Licensed User
Longtime User
Hallo specci48

vielen Dank für Deinen Vorschlag und Deine Mühe - ich werde es mal so ausprobieren.

Gruß
Petrus
 
Top