Como colorear sentencias SQL con VB.Net Fecha: 30/Nov/2004 (24 de Noviembre de 2004)
|
Introducci�n:
La publicaci�n de este articulo surge luego de que por razones laborales necesite hacer una herramienta de trazabilidad que permita ver desde la capa de presentaci�n hasta las estructuras de las tablas intervinientes en cada etapa del desarrollo de un producto que realiza la empresa donde trabajo. Para lo cual necesitaba en un punto algo tan sencillo como mostrar el contenido de los stored procedures.
El c�digo es bastante sencillo, espero que les sirva.
Como Funciona.
Dentro del m�todo "ColorearSQL", se realiza el proceso, comenzando por colorear todo el texto del RichTextBox en negro con fuente Courier New 9.
Luego invoca a un m�todo setTextColor, pas�ndole por par�metro la palabra a colorear y luego el color, por ejemplo:
setTextColor("select", Color.Blue)
B�sicamente se utilizan 3 colores para palabras reservadas dentro de las sentencias SQL, estos son Blue, Fucsia, Gray. El cuarto color es el Red, usado para las palabras entre comillas "'" o """. El Quinto color es el Green que se usa para cometarios, tanto cortos "--" como largos "/*____*/". Es por ello que luego de colorear las palabras se invoca a los m�todos
SetConstant(Color.Red)
SetComment(Color.Green)
SetCommentLong(Color.Green)
SetTextColor (para las palabras reservadas): Private Sub setTextColor(ByVal pStr As String, ByVal pColor As Drawing.Color)
Dim i As Integer
Dim posAnt As Integer
posAnt = -1
RichTextBox1.SelectionStart = 0
RichTextBox1.SelectionLength = 0
For i = 0 To 1000
If i = 0 Then
RichTextBox1.Find(pStr, 0, RichTextBoxFinds.WholeWord)
Else
RichTextBox1.Find(pStr, RichTextBox1.SelectionStart + 1, RichTextBoxFinds.WholeWord)
End If
If posAnt = RichTextBox1.SelectionStart Then
Exit For
End If
RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular)
RichTextBox1.SelectionColor = pColor
posAnt = RichTextBox1.SelectionStart
Next
End SubSetConstant (para las palabras entre comillas):
Private Sub SetConstant(ByVal pColor As Drawing.Color) Dim i As Integer Dim posAnt As Integer Dim pos1, pos2 As Integer posAnt = -1 RichTextBox1.SelectionStart = 0 RichTextBox1.SelectionLength = 0 For i = 0 To 1000 If i = 0 Then RichTextBox1.Find("'", 0, RichTextBoxFinds.None) Else RichTextBox1.Find("'", pos2 + 1, RichTextBoxFinds.None) End If pos1 = RichTextBox1.SelectionStart RichTextBox1.Find("'", RichTextBox1.SelectionStart + 1, RichTextBoxFinds.None) pos2 = RichTextBox1.SelectionStart If posAnt = pos1 Or RichTextBox1.SelectedText = "" Then Exit For End If RichTextBox1.SelectionStart = pos1 RichTextBox1.SelectionLength = pos2 - pos1 + 1 RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular) RichTextBox1.SelectionColor = pColor posAnt = RichTextBox1.SelectionStart Next End SubSetComment(para los comentarios cortos):Private Sub SetComment(ByVal pColor As Drawing.Color) Dim strLine As String Dim strWords As String For Each strLine In RichTextBox1.Lines If InStr(strLine, "--") > 0 Then strWords = Mid(strLine, InStr(strLine, "--")) setTextColor(strWords, pColor) End If Next End SubSetComment(para los comentarios cortos):Otra vez texto normal.
Private Sub SetCommentLong(ByVal pColor As Drawing.Color) Dim i As Integer Dim posAnt As Integer Dim pos1, pos2 As Integer posAnt = -1 RichTextBox1.SelectionStart = 0 RichTextBox1.SelectionLength = 0 For i = 0 To 1000 If i = 0 Then RichTextBox1.Find("/*", 0, RichTextBoxFinds.None) Else RichTextBox1.Find("/*", pos2 + 1, RichTextBoxFinds.None) End If pos1 = RichTextBox1.SelectionStart RichTextBox1.Find("*/", RichTextBox1.SelectionStart + 1, RichTextBoxFinds.None) pos2 = RichTextBox1.SelectionStart If posAnt = pos1 Or RichTextBox1.SelectedText = "" Then Exit For End If RichTextBox1.SelectionStart = pos1 RichTextBox1.SelectionLength = pos2 - pos1 + 1 RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular) RichTextBox1.SelectionColor = pColor posAnt = RichTextBox1.SelectionStart Next End Sub
Fichero con el c�digo de ejemplo: cluque_ColorearSQL.zip - Tama�o 8 KB