以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 编辑器代码着色  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=81079)

--  作者:lsy
--  发布时间:2016/2/18 9:46:00
--  [求助] 编辑器代码着色
代码编辑器中,代码字符分类着色,能增强代码的可读性,没这功能也可以,但显得不专业。
边输入边着色,比较容易,代码简单,也不影响输入速度,因为输入过程中要做很多判断,着色只是在已有判断的基础上的顺带功能。

这样的着色,在代码重排或者代码是粘贴进来的或者是打开文件加载进来的,就不会起作用。

从狐表的着色效果看,也算不错了,只是有点不完美:
有时不能着色,有时误着色,特别是在双引号、单引号比较多的时候,不但影响着色,还影响代码精灵的判断。
感觉还能影响代码输入速度。

现在想用一个按钮,手工点击,使代码分类着色,与其他的功能分开,这样不会影响输入速度。

代码着色是逐行进行的,只要解决一行代码的着色就解决问题了。

求教高效的着色代码,不管什么方式,有效、高效,就行。

注:编辑器是用RichTextBox控件制作的。

--  作者:大红袍
--  发布时间:2016/2/18 9:49:00
--  

 用空格分隔各个字符,如果是关键字,就着色不就行了?


--  作者:lsy
--  发布时间:2016/2/18 9:51:00
--  
关键就在于分隔符,只用空格做分隔符,是不能满足要求的。
为了使代码输入更灵便,分隔符种类越多越好。

--  作者:lsy
--  发布时间:2016/2/18 9:53:00
--  
还有,在按钮中写代码,为什么只对背景颜色有效,对字符颜色无效?
--  作者:大红袍
--  发布时间:2016/2/18 9:54:00
--  

 分隔符可以任意多个啊。

 

Dim str As String = "dim a as string = CurrentTable.name"
For Each s As String In str.split( new Char() {" ", "."})
    output.show(s)
Next


--  作者:lsy
--  发布时间:2016/2/18 9:55:00
--  
比如这段代码,放在TextChanged事件中有效,在按钮中就无效了:
If Selected_Text.Trim.StartsWith("\'") Then
    start = _rtx.SelectionStart
    _rtx.SelectionStart = First_Index
    _rtx.SelectionLength = Selected_Text.Length
    _rtx.SelectionColor = Color.Gray
    _rtx.SelectionStart = start
Else
    Dim Type_str As String() = DataTables("代码格式化嫦娥").GetComboListString("VB类型","VB类型 Is Not Null").Split("|")
    Dim Key_str As String() = DataTables("代码格式化嫦娥").GetComboListString("VB关键","VB关键 Is Not Null").Split("|")
    start = _rtx.SelectionStart - old_s.Length
    If start < 0 Then
        _rtx.SelectionStart = 0
    Else
        _rtx.SelectionStart - = old_s.Length
    End If
    _rtx.SelectionLength = old_s.Length
    If Array.IndexOf(Type_str,old_s) > - 1 Then
        _rtx.SelectionColor = Color.Violet
    ElseIf Array.IndexOf(Key_str,old_s) > - 1 Then
        _rtx.SelectionColor = Color.Blue
    ElseIf IsNumeric(old_s) Then
        _rtx.SelectionColor = Color.Green
    Else
        _rtx.SelectionColor = Color.Black
    End If
    _rtx.SelectionStart + = old_s.Length
End If
_rtx.SelectionLength = 0
_rtx.SelectionColor = Color.Black

--  作者:大红袍
--  发布时间:2016/2/18 9:57:00
--  

你加入msgbox定位错误

 

选中对应的字符,然后才能设置颜色的。

[此贴子已经被作者于2016/2/18 9:56:52编辑过]

--  作者:lsy
--  发布时间:2016/2/18 9:59:00
--  
写代码的人,对于空格并不总是很在意,比如逗号后面,往往就不留空格。
--  作者:lsy
--  发布时间:2016/2/18 10:03:00
--  
以下是引用大红袍在2016/2/18 9:57:00的发言:

你加入msgbox定位错误

 

选中对应的字符,然后才能设置颜色的。


肯定先选中了,不然背景颜色也不会设置成功。


[此贴子已经被作者于2016/2/18 9:56:52编辑过]


--  作者:大红袍
--  发布时间:2016/2/18 10:03:00
--  
 代码那里,肯定是必须有分隔符的啊,或空格或点或回车 等等,分割开来就行啊
[此贴子已经被作者于2016/2/18 10:02:45编辑过]