我想做一个“在RichTextBox中进行复杂查找字符串的功能”。
我试了两个方法:1、RichTextBox.find(findtext,start,end)
                2、inStr(start,RichTextBox.Text,findtext)
都能实现,可是,当RichTextBox读取的是大型文本文件时,在“查找”的时候,速度总是很慢,就算要查找的字符串就在前几行,也是一样的,要等好久,请问,要如何做,才能像"记事本”或“写字板”一样,可以快速查找定位呢?PS:我也想过用一个数组来读取存放RichTextBox中每一行的文本,再进行查找,可是我用了SendMessage的Getline功能,可是总是不能读取,好像SendMessage的这个功能只能针对TextBox啊?!

解决方案 »

  1.   

    //可是我用了SendMessage的Getline功能,可是总是不能读取,好像SendMessage的这个功能只能针对TextBox啊?!RichTextBox不支持em_getline消息
      

  2.   

    用EM_FINDTEXTEX如何?该消息可以指定范围(CHARRANGE )查找
    EM_FINDTEXTEX
    Finds text within a rich edit control.EM_FINDTEXTEX 
    wParam = (WPARAM) (UINT) fuFlags; 
    lParam = (LPARAM) (FINDTEXTEX FAR *) lpFindText; 
     
    其中引用类型FINDTEXTEX 
    FINDTEXTEX
    Contains information about text to search for in a rich edit control. This structure is used with the EM_FINDTEXTEX message.typedef struct _findtextex { 
        CHARRANGE chrg;      // range to search
        LPSTR lpstrText;     // null-terminated string to find
        CHARRANGE chrgText;  // range in which text is found
    } FINDTEXTEX; 
     
      

  3.   

    就用楼上说的EM_FINDTEXTEX消息,不过你在发送这个消息的时候可能会遇到一些麻烦,不过今天我是没时间了,你先自己研究一下吧
      

  4.   

    参考:http://www.leftworld.net/wenzhang/show?id=274.html
      

  5.   

    请问EM_FINDTEXTEX在VB中要如何设定它的const值啊?!在上面的网址的内容好像是汇编的啊!小弟不懂啊!
      

  6.   

    Const WM_USER = &H400
    Const EM_FINDTEXTEX = (WM_USER + 79)
      

  7.   

    应该是这个吧
    Const EM_FINDTEXTEX = &H44F
      

  8.   

    另外,请教一个问题:
    我用
    RichTextBox1.SelStart = RichTextBox1.SelStart + 1
    RichTextBox1.Find(TextFind.Text, , len(RichTextBox1.Text), rtfHighlight)
    组合进行查询的时候,遇到这样一个问题,就是当RichTextBox读取的是大型文本时(如2M的txt文档),经常只能查询到文本的前半部分为止(在文本的后半部分,也有要查询的内容,可是它就是不继续查下去了),这是为什么啊?!要怎么解决呢?