有RichEdit中用FindText会返回所搜索字串在文本中的位置,如果只知道RichEdit中某一行的行号,如何通过行号算出在文本中的位置号?

解决方案 »

  1.   

    RichEdit1.FindText(RichEdit1.Lines.Strings[行号],......);
      

  2.   

    liyinwei(月夜彩虹)
    你好,具体情况是这样的:我自己用POS写的一个向上查找功能,找到关键字后想能够选中并设置焦点。现在的情况是找到了关键字所在行,但不知道要如何才能选中键字并设置焦点激活。如果有其它实现向上查找的方法也行(用POS效率太低),但不能使用FindDialog窗体。
      

  3.   

    1.用Pos是比较慢,如果文本比较长或者需要“往上”查找,就不应该用Pos或PosEx之类的函数,建议楼主用FastStrings单元,它是用汇编写的,可以在大文本内快速定位字符串,而且支持“往上”查找,往上查找用FastPosBack,往下查找用FastPos。FastStrings可以在网上找到它的最新版本,那可是很多程序员的心血结晶!
    2.关于RichEdit内部定位光标的问题。
    用第一条的方法获得需要查找的字符串的位置后,就设置SelStart和SelLength,这不多说楼主也会,然后用
    RichEdit.Perform(EM_SCROLLCARET, 0, 0);
    直接定位滚动条滚动到被选择的字符串处。
      

  4.   

    i:=你的行号;
    RichEdit1.SelStart:=SendMessage(RichEdit1.Handle, EM_LINEINDEX, i, 0);
    RichEdit1.SelStart:=RichEdit1.SelStart+pos('关键字',RichEdit1.Lines.Strings{i]);
    RichEdit1.SelLength:=2;
    RichEdit1.SetFocus;
      

  5.   

    随手写的,未测试,可能略有出入,但肯定可以找到
    或者需要改成
    RichEdit1.SelStart:=RichEdit1.SelStart+pos('关键字',RichEdit1.Lines.Strings{i])-length(你的关键字);
    RichEdit1.SelLength:=length(你的关键字);
    自己试试吧