| 
		
	
	
	
		
	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.DrawingPublic 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
 ![[Image: 2hnx8av.jpg]](http://i54.tinypic.com/2hnx8av.jpg)  
	
	
	
		
	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.selectionstartdim 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
 ![[Image: 2hnx8av.jpg]](http://i54.tinypic.com/2hnx8av.jpg)  
	
	
	
		
	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
 ![[Image: 2hnx8av.jpg]](http://i54.tinypic.com/2hnx8av.jpg)  
	
	
	
		
	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
 ![[Image: 2hnx8av.jpg]](http://i54.tinypic.com/2hnx8av.jpg)  
	
	
	
		
	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 stringDim 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
 |