index.php?id=109
Por Yal Publicidad
Publicado el Jue 25 de Febrero del 2021 a las 17:01
En esta ocasión vamos a colorear un fragmento de código dentro de un HTML, para ello utilizaremos el método .find del RichTextBox...
Para este ejemplo utilizaremos las llaves de php el resultado sera algo como esto:
<html>
<body>
<?php
echo("Hola Mundo");
?>
<br>
<?php
$dia=date("d.m.Y");
echo "$dia";
?>
</body>
</html>

Si nos damos cuenta solo colorea donde encuentra una cadena de apertura <?php y termina hasta que encuentra la llave de cierre ?>
Esta es una forma básica, pero la que, con un poco más de esfuerzo se puede convertir en un verdadero editor de código html.
Bien, ahora abrimos un Form insertamos un componente RichTextBox y pegamos el siguiente código:
FORM1:
Private Function Resaltar_Texto(RichTextBox As RichTextBox, _
Cadena1 As String, Cadena2 As String, Color_Text As Long) As Integer
On Local Error Resume Next
' Almacena la Posición del primer carácter cuando se encuentra la cadena
Dim Pos_Caracter As Long
' Almacena la Posición Final del carácter cuando se encuentra la cadena
Dim PosFin_Caracter As Long
' Almacena el Tamaño y longitud del texto a buscar
Dim LenCadena As Long
' Inicio de la selección
Dim posSelInicio As Long
'Para la posición del texto seleccionado
Dim posSelLen As Long
'Guarda la posición y la longitud del texto que está seleccionado
posSelInicio = RichTextBox.SelStart
posSelLen = RichTextBox.SelLength
'Si no encuentra la cadena colorea el texto de color negro
RichTextBox.SelStart = posSelInicio
RichTextBox.SelLength = Len(RichTextBox.Text)
RichTextBox.SelColor = vbBlack
' Busca con Find la cadena. En la variable Guardamos la posición donde se encontró
Pos_Caracter = RichTextBox.Find(Cadena1, 0) 'la búsqueda no es estricta
While Pos_Caracter > 0
'Le decimos hasta donde debe colorear el texto
PosFin_Caracter = RichTextBox.Find(Cadena2, Pos_Caracter)
If PosFin_Caracter > 0 Then
LenCadena = (PosFin_Caracter - Pos_Caracter) 2 'si encontramos la cadena ?>, finalizamos
Else ' si no encontramos la cadena ?> seguimos coloreando hasta que encuentre la cadena ?>
LenCadena = Len(RichTextBox.Text)
End If
With RichTextBox
'asignamos la variable anterior a la propiedad SelStart del RichTextBox
.SelStart = Pos_Caracter
'Establecemos en SelLength el tamaño de la cadena nuevamente
.SelLength = LenCadena
'Esto le asigna el color de resalte que aplicará _
al texto encontrado en el Richtextbox
.SelColor = Color_Text
'Seguimos buscando mas coincidencias
Pos_Caracter = .Find(Cadena1, _
(Pos_Caracter LenCadena))
End With
Wend
' Seteamos las propiedades SelStart y Sellength
RichTextBox.SelStart = posSelInicio
RichTextBox.SelLength = posSelLen
End Function
Private Sub RichTextBox1_Change()
Call Resaltar_Texto(RichTextBox1, "", RGB(255, 0, 0))
End Sub
Colocamos la función en el evento change para que cada vez que se escriba identifique automáticamente si se encuentra o no las cadenas <?php ?>. Si queremos que la coincidencia sea estricta debemos agregar las constantes rtfWholeWord y rtfMatchCase nuestras función quedará así:
Pos_Caracter = RichTextBox.Find(Cadena1, 0, , rtfWholeWord rtfMatchCase) PosFin_Caracter = RichTextBox.Find(Cadena2, Pos_Caracter, , rtfWholeWord rtfMatchCase)
Con ello tiene que haber un espacio después de la llave de apertura <?php y un espacio antes de la llave de cierre ?> para que identifique que se trata de la cadena de apertura y la de cierre si omitimos esto nuestro ejemplo quedará algo así con las costantes rtfWholeWord y rtfMatchCase:
<html><body><?phpecho("Hola Mundo"); ?><br><?php $dia=date("d.m.Y"); echo "$dia";?></body></html>
Espero que les sea de mucha utilidad.
Saludos
Yuri Lizama