Posts: 31
Threads: 9
Joined: Aug 2011
Reputation:
0
Hello, here I am asking for help again <!-- s --><img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt=" " title="Very Happy" /><!-- s -->. So, what I want is to know if there's a way to make a programm like a PHP editor, I want my application to "read" the code and change some keywords like "for", "while" to a specified color.
Posts: 245
Threads: 31
Joined: Sep 2010
Reputation:
0
Okay it might be abit tricky but you will have to make a new class file either inside your current program or in a new dll file
but here is the code ive come up with and it works fine <!-- s --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=" " title="Smile" /><!-- s -->
Code: Imports System.Drawing
Public Class SnX
Inherits System.Windows.Forms.RichTextBox
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWnd As Integer) As Integer
Private _SyntaxHighlight_CaseSensitive As Boolean = False
Private Words As New DataTable
Private Enum EditMessages
LineIndex = 187
LineFromChar = 201
GetFirstVisibleLine = 206
CharFromPos = 215
PosFromChar = 1062
End Enum
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
ColorVisibleLines()
End Sub
Public Sub ColorRtb()
Dim FirstVisibleChar As Integer
Dim i As Integer = 0
While i < Me.Lines.Length
FirstVisibleChar = GetCharFromLineIndex(i)
ColorLineNumber(i, FirstVisibleChar)
i += 1
End While
End Sub
Public Sub ColorVisibleLines()
Dim FirstLine As Integer = FirstVisibleLine()
Dim LastLine As Integer = LastVisibleLine()
Dim FirstVisibleChar As Integer
If (FirstLine = 0) And (LastLine = 0) Then
Exit Sub
Else
While FirstLine < LastLine
FirstVisibleChar = GetCharFromLineIndex(FirstLine)
ColorLineNumber(FirstLine, FirstVisibleChar)
FirstLine += 1
End While
End If
End Sub
Public Sub ColorLineNumber(ByVal LineIndex As Integer, ByVal lStart As Integer)
Dim i As Integer = 0
Dim Instance As Integer
Dim LeadingChar, TrailingChar As String
Dim SelectionAt As Integer = Me.SelectionStart
Dim MyRow As DataRow
Dim Line() As String, MyI As Integer, MyStr As String
' Lock the update
LockWindowUpdate(Me.Handle.ToInt32)
MyI = lStart
If CaseSensitive Then
Line = Split(Me.Lines(LineIndex).ToString, " ")
Else
Line = Split(Me.Lines(LineIndex).ToLower, " ")
End If
For Each MyStr In Line
Me.SelectionStart = MyI
Me.SelectionLength = MyStr.Length
If Words.Rows.Contains(MyStr) Then
MyRow = Words.Rows.Find(MyStr)
If (Not CaseSensitive) Or (CaseSensitive And MyRow("Word") = MyStr) Then
Me.SelectionColor = Color.FromName(MyRow("Color"))
End If
Else
Me.SelectionColor = Color.Black
End If
MyI += MyStr.Length + 1
Next
' Restore the selectionstart
Me.SelectionStart = SelectionAt
Me.SelectionLength = 0
Me.SelectionColor = Color.Black
' Unlock the update
LockWindowUpdate(0)
End Sub
Public Function GetCharFromLineIndex(ByVal LineIndex As Integer) As Integer
Return SendMessage(Me.Handle, EditMessages.LineIndex, LineIndex, 0)
End Function
Public Function FirstVisibleLine() As Integer
Return SendMessage(Me.Handle, EditMessages.GetFirstVisibleLine, 0, 0)
End Function
Public Function LastVisibleLine() As Integer
Dim LastLine As Integer = FirstVisibleLine() + (Me.Height / Me.Font.Height)
If LastLine > Me.Lines.Length Or LastLine = 0 Then
LastLine = Me.Lines.Length
End If
Return LastLine
End Function
Public Sub New()
Dim MyRow As DataRow
Dim arrKeyWords() As String, strKW As String
Me.AcceptsTab = True
''Load all the keywords and the colors to make them
Words.Columns.Add("Word")
Words.PrimaryKey = New DataColumn() {Words.Columns(0)}
Words.Columns.Add("Color")
arrKeyWords = New String() {"select", "insert", "delete", _
"truncate", "from", "where", "into", "inner", "update", _
"outer", "on", "is", "declare", "set", "use", "values", "as", _
"order", "by", "drop", "view", "go", "trigger", "cube", _
"binary", "varbinary", "image", "char", "varchar", "text", _
"datetime", "smalldatetime", "decimal", "numeric", "float", _
"real", "bigint", "int", "smallint", "tinyint", "money", _
"smallmoney", "bit", "cursor", "timestamp", "uniqueidentifier", _
"sql_variant", "table", "nchar", "nvarchar", "ntext", "left", _
"right", "like", "and", "all", "in", "null", "join", "not", "or"}
For Each strKW In arrKeyWords
MyRow = Words.NewRow()
MyRow("Word") = strKW
MyRow("Color") = Color.Blue.Name
Words.Rows.Add(MyRow)
Next
End Sub
Public Property CaseSensitive() As Boolean
Get
Return _SyntaxHighlight_CaseSensitive
End Get
Set(ByVal Value As Boolean)
_SyntaxHighlight_CaseSensitive = Value
End Set
End Property
Website: <!-- m --><a class="postlink" href="http://www.PBAProductions.com">http://www.PBAProductions.com</a><!-- m -->
E-Mail: <!-- e --><a href="mailto atrick@AriSystems.Org">Patrick@AriSystems.Org</a><!-- e -->
Skype: Qwaxer
Youtube: Qwaxer
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
Well, you can try using something like this (Don't know how well it would work)
Code: dim ss as integer = richtextbox1.selectionstart
dim sl as integer = richtextbox1.selectionlength
RichTextbox1.find("for")
richtextbox1.selectioncolor = color.red
richtextbox1.selectionstart = ss
richtextbox1.selectionlenth = sl
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
xolara Wrote:Hey if you can provide me with the full syntax list ill have a library ready for you soon
Wow. What a nice guy!
Posts: 245
Threads: 31
Joined: Sep 2010
Reputation:
0
Updated my post <!-- s --><img src="{SMILIES_PATH}/icon_razz.gif" alt=" " title="Razz" /><!-- s -->
Website: <!-- m --><a class="postlink" href="http://www.PBAProductions.com">http://www.PBAProductions.com</a><!-- m -->
E-Mail: <!-- e --><a href="mailto atrick@AriSystems.Org">Patrick@AriSystems.Org</a><!-- e -->
Skype: Qwaxer
Youtube: Qwaxer
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
So apparently your programming skills have really improved, Xolara. Nice work.
Posts: 245
Threads: 31
Joined: Sep 2010
Reputation:
0
Been working on it for some time though just got around finishing it
Website: <!-- m --><a class="postlink" href="http://www.PBAProductions.com">http://www.PBAProductions.com</a><!-- m -->
E-Mail: <!-- e --><a href="mailto atrick@AriSystems.Org">Patrick@AriSystems.Org</a><!-- e -->
Skype: Qwaxer
Youtube: Qwaxer
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
xolara Wrote:Been working on it for some time though just got around finishing it
Ah wow, very nice!! This could definitely come in handy
Posts: 245
Threads: 31
Joined: Sep 2010
Reputation:
0
Please report back to me about it <!-- s --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=" " title="Smile" /><!-- s -->
Website: <!-- m --><a class="postlink" href="http://www.PBAProductions.com">http://www.PBAProductions.com</a><!-- m -->
E-Mail: <!-- e --><a href="mailto atrick@AriSystems.Org">Patrick@AriSystems.Org</a><!-- e -->
Skype: Qwaxer
Youtube: Qwaxer
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
I finally tried this out - It works great!!!
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
I have recently found this control as well:
<!-- m --><a class="postlink" href="http://www.freevbcode.com/ShowCode.asp?ID=5176">http://www.freevbcode.com/ShowCode.asp?ID=5176</a><!-- m -->
I believe it is free to use in all applications, but don't quote me on that.
It includes very nice syntax highlighting, comment highlighting, and a very nice line number-er as well. Check it out!
Posts: 31
Threads: 9
Joined: Aug 2011
Reputation:
0
I think that control doesn't work anymore. And the code that Xolara posted, could anyone explain how I use it? XD
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
Covert2String Wrote:I think that control doesn't work anymore.
Actually, I am using that control in both TwitControl and HTML-IDEx, and it works perfectly, and very nicely as well. It comes bundled with a sample project, so you can experiment with that to figure out how to use it.
Quote: And the code that Xolara posted, could anyone explain how I use it? XD
As per Xolara's code, I did use it, and it works fine, but right now it is late, tomorrow I'll try to get a nice explanation online.
Posts: 31
Threads: 9
Joined: Aug 2011
Reputation:
0
Well, I executed the example which was in the control's source, and it didn't changed the colour of the keywords. I'm using Visual Sudio 2010 btw.
Edit: The control works great, thanks! Btw, do you know any control to use configuration files?
file.cfg:
name = "oo"
age = "1"
Just like this, but I have to be able to read & write data to the file in my application.
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
Yeah, it required a bit of tweaking to get the keywords to actually color themselves (For starters, the keywords had to actually be known). But I am glad you figured it out!
And as for the configuration file control, I do not know of any offhand, because I have always coded it myself. Here is the code for reading a config file, if this helps at all.
Code: Dim tNAME as string
Dim tAGE As String
Dim reader as new system.io.streamreader(My.application.info.directorypath + "/file.cfg")
Dim split() as String = reader.readtoend.split(vbNewLine)
reader.close()
For each item in split
If item.contains("name=") then
Dim name as string = item.replace("name=","")
name = name.replace(Chr(34),"")
tNAME = name
end if
If item.contains("age=") then
Dim age as string = item.replace("age=","")
age = age.replace(Chr(34),"")
tAGE = age
End if
next
'Sorry if this code messes up, it was coded without experimentation and right on this post
This code will simply loop through every line of a config file, and if the line contains "name", it will remove the "name=", and remove the quotations, and leave you with "oo" (In this case)
Of course, this is tedious because it needs to be done with every single option, but it is really easy to understand.
Hope this helps!
Posts: 31
Threads: 9
Joined: Aug 2011
Reputation:
0
Thank you for the code, but I coded on by myself <!-- s --><img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt=" " title="Very Happy" /><!-- s --> It checks if the line contains a keyword and it reads after the =.
Posts: 1,006
Threads: 111
Joined: Jul 2010
Reputation:
1
Very nice!! If you would like to, you can share your code snippet in the code snippet section!
Posts: 6
Threads: 1
Joined: Dec 2011
Reputation:
0
Covert2String Wrote:Hello, here I am asking for help again <!-- s --><img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt="" title="Very Happy" /><!-- s -->. So, what I want is to know if there's a way to make a programm like a PHP editor, I want my application to "read" the code and change some keywords like "for", "while" to a specified color.
PHP Editor would be really difficult, but you can always try a HTML Editor by using a TextBox, a WebBrowser, another textbox and a button!
Basically TextBox1 will be for the HTML code. So we don't really need any code on that one.
Our WebBrowser1 doesn't need any code, neither does TextBox2.
For Button1 just add (I keep thinking I'm working in Flash so I put on(release){ <!-- s --><img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt=" " title="Very Happy" /><!-- s -->):
Code: WebBrowser1.Navigate(TextBox2.Text)
TextBox1.Text = WebBrowser1.DocumentText
|