Desarrolle esta función que me ayuda para montar mis mensajes CSBUILDER.
Creo que está también por ahí, pero por si sirve de ayuda...
para probarla hacer algo como esto por ejemplo:
dim txt as string = "HOLA, #COLOR.RED#AMIGOS DEL #COLOR.YELLOW##FONTSIZE.25# MUNDO MUNDIAL"
dim csvar as csbuilder = GetCsBuilderTextULTIMAVERSION(txt)
msgbox csvar
En mis consultas sql, monto ese string, y así puedo perosnalizar todo desde el servidor:
SELECT
'#COLOR.CYAN#Vehículo: #COLOR.WHITE#' + COALESCE(Cod_Vehiculo,'') + dbo.crlf()+
'#COLOR.CYAN#Kilómetros: #COLOR.WHITE#' + isnull(ltrim(KilometrosActual), 'Sin revisón') +dbo.crlf()+
'#COLOR.CYAN#Fecha: ' + isnull(fecha,'') +
CASE WHEN Revision = 'OK' THEN ' #FONTSIZE.24##TYPEFACE.FONTAWESOME.0xF00C#' ELSE '-> #COLOR.RED##TYPEFACE.MATERIALICONS.0xE000##TYPEFACE.DEFAULT# ' + Revision END as TXTParaCLV,
Cod_Vehiculo + char(9) + ltrim(KilometrosActual) + char(9) + Revision + char(9) + Fecha as TxtParaclickEnClV
FROM
public Sub GetCsBuilderTextULTIMAVERSION(Texto As String ) As CSBuilder
'ESTE ES EL BUENO
Dim CS As CSBuilder
Dim S As String
'https://www.b4x.com/android/forum/threads/how-create-csbuilder-from-text-sequence.141657/#post-897915
Try
'FIRST SPLIT MUST BE A TEXT . ********************************************** DELETE FIRST CHAR DOWN #ESPECIAL CODE 1#
Texto = " " & Texto
Dim M() As String
M = Regex.Split("#",Texto)
'SAMPLE:
'HOLA, #COLOR.RED#AMIGOS DEL #COLOR.YELLOW##FONTSIZE.25# MUNDO MUNDIAL
CS.Initialize
For f = 0 To M.Length-1
s = M(f)
If F = 0 Then '**********************************************************DELETE DE FIRST CHAR ADD #ESPECIAL CODE 1#
S = S.SubString(1)
End If
If f Mod 2 = 1 Then
Log(S.ToUpperCase)
Select Case S.ToUpperCase
Case "COLOR.RED"
CS.Color(Colors.Red)
Case "COLOR.YELLOW"
CS.Color(Colors.Yellow)
Case "COLOR.GREEN"
CS.Color(Colors.Green )
Case "COLOR.MAGENTA"
CS.Color(Colors.Magenta )
Case "COLOR.BLACK"
CS.Color(Colors.Black)
Case "COLOR.WHITE"
CS.Color(Colors.White )
Case "COLOR.CYAN"
CS.Color(Colors.Cyan )
Case "COLOR.DARKGRAY"
CS.Color(Colors.DarkGray)
Case "COLOR.GRAY"
CS.Color(Colors.Gray)
Case "COLOR.LIGHTGRAY"
CS.Color(Colors.LightGray)
Case "COLOR.TRANSPARENT"
CS.Color(Colors.Transparent)
Case "COLOR.BLUE"
CS.Color(Colors.Blue )
'... MORE COLOR
'FUTURE IMPLEMETATIONS:**********************************************
Case Else
If S.StartsWith("TYPEFACE.") Or S.StartsWith("FONTSIZE.") Then
'Log(S)
Dim UltimoPunto As Int
Dim ValorTrasUltimoPunto0X As String
UltimoPunto = S.LastIndexOf(".")
Dim ValorTrasUltimoPunto As String
Dim ValorPrevioUltimoPunto As String
ValorTrasUltimoPunto = S.SubString(UltimoPunto+1)
ValorPrevioUltimoPunto = S.SubString2(0,UltimoPunto)
'Chr(0xF2DC) ' nieve copo
Dim ii As Char
' Chr(0xF0E7)
Dim ValorInt As Int
'SOLO PARA FONTAWESOME Y MATERIALICONOS
If S.StartsWith("TYPEFACE.FONTAWESOME") Or S.StartsWith("TYPEFACE.MATERIALICONS") Then
If ValorTrasUltimoPunto.Length > 2 Then
ValorTrasUltimoPunto0X = ValorTrasUltimoPunto.SubString(2)
ValorInt = Bit.ParseInt(ValorTrasUltimoPunto0X,16)
ii = Chr( ValorInt )
End If
Else
If ValorPrevioUltimoPunto = "TYPEFACE" Then 'TYPEFECE.LOQUESEA (Y SIN MAS VALORES)
ValorPrevioUltimoPunto = S
End If
ValorTrasUltimoPunto0X = ""
ValorInt= 0
End If
Select Case ValorPrevioUltimoPunto
Case "TYPEFACE.FONTAWESOME"
CS.Typeface(Typeface.FONTAWESOME)
CS.Append(ii)
Case "TYPEFACE.MATERIALICONS"
CS.Typeface(Typeface.FONTAWESOME)
CS.Append(ii)
Case "TYPEFACE.DEFAULT"
CS.Typeface(Typeface.DEFAULT)
'SINO.. NO FUNCIONA
CS.PopAll
Case "TYPEFACE.DEFAULTBOLD"
CS.Typeface(Typeface.DEFAULT_BOLD)
Case "TYPEFACE.STYLE_ITALIC"
CS.Typeface( Typeface.CreateNew(Typeface.DEFAULT, Typeface.STYLE_ITALIC))
Case "TYPEFACE.SERIF"
CS.Typeface(Typeface.SERIF)
Case "FONTSIZE"
ValorInt = Bit.ParseInt(ValorTrasUltimoPunto,10) 'BASE 10
CS.Size(ValorInt)
End Select
End If
End Select
Else
CS.Append(S)
End If
Next
CS.PopAll
Return CS
Catch
Log(LastException)
Return CS.Initialize.Append("Error: " & S).PopAll
End Try
End Sub