回 帖 发 新 帖 刷新版面

主题:[讨论]RichTextBox中修改指定字符的颜色遇到的特殊问题!

我想修改RichTextBox中指定字符的颜色。在论坛的“zzyong00 阿勇”达人的帮助下,实现了这项功能。 
比如:RichTextBox中的内容如下所示: 
  RichTextBox1=“这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。” 
我想把文本中所有的“习惯”都设为红色字体和五号字。 
Dim pos As Long 
Do 
    pos = InStr(pos + 1, RichTextBox1.Text, "习惯", vbTextCompare) 
    If pos = 0 Then Exit Do 
    RichTextBox1.SelStart = pos - 1 
    RichTextBox1.SelLength = 2 
    RichTextBox1.SelColor = vbRed 
    RichTextBox1.SelFontSize = 10 
Loop 
用上述“zzyong00 阿勇”提供的代码实现了这一功能。 
但是我现在的文本框中的内容有数学公式,而一些特殊字符是希腊字母。我现在想修改特定字符的时候,就不能准确定位了,指定的字符没法修改。比如下面的代码: 
Private Sub Command1_Click() 
Dim pos As Integer 
  RichTextBox1.Text = "Ts = γ△T(ψ-π) / δθπ(γ + 2)) ^(1/2) =0.5" & vbLf & Space(5) & _ 
                            "*****************************" & " 计算结果不满足要求!" _ 
                            & vbLf & Space(5) & "*****************************" 
              
Do 
    pos = InStr(pos + 1, RichTextBox1.Text, "满足", vbTextCompare) 
    If pos = 0 Then Exit Do 
    RichTextBox1.SelStart = pos - 1 
    RichTextBox1.SelLength = 2 
    RichTextBox1.SelColor = vbRed 
    RichTextBox1.SelFontSize = 10 
Loop              
End Sub 

大家帮帮忙,看看这个该如何解决,真的很着急,拜托大家给出出注意,万分感激! 

回复列表 (共1个回复)

沙发

那个数学公式中的特殊字符对搜索函数有影响,无法正确执行。其中的原因我也不清楚,有点类似于系统自带的记事本输入某些特别的字符时会出现一些怪现象。
你不妨试试下面的代码:

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub 查找_Click()
Dim pos As Long, St As String 
St = InputBox$("请输入查找内容", "查找"): If St = "" Then Exit Sub
RichTextBox1.SetFocus
Do
  pos = RichTextBox1.Find(St, pos)
  If pos = -1 Then MsgBox "没有找到“" & St & "”": Exit Do
  RichTextBox1.SelColor = vbRed
  SendMessage RichTextBox1.hwnd, 176, 0, pos
  If MsgBox("是否继续查找?", 4, "查找下一个") = 7 Then pos = -1
Loop While pos > -1
End Sub

我来回复

您尚未登录,请登录后再回复。点此登录或注册