SendMessage(Memo1.Handle, EM_LINEINDEX, 2,0);想把光标定位到Memo1的第三行上,但是调试没实现效果.

解决方案 »

  1.   

    怎么没效果,光标还在memo上吗,发完消息,show一下行号
      

  2.   

     Memo1.SetFocus;
     Memo1.SelStart := SendMessage(Memo1.Handle, EM_LINEINDEX, 2,0);
      

  3.   


    这样行了,原来我只是写SendMessage(Memo1.Handle, EM_LINEINDEX, 2,0);
      

  4.   

    明白了,EM_LINEINDEX消息用来返回指定行的第一个字符在全部文本中的位置.
    所以Memo1.SelStart := SendMessage(Memo1.Handle, EM_LINEINDEX, 2, 0);就是把光标定位在第3行的第一个字符前面了.
    如果想把光标定位在第n行第m列就需要用到下面的代码:
    Memo1.SelStart := SendMessage(Memo1.Handle, EM_LINEINDEX, n - 1, 0) +  m - 1;
      

  5.   

    返回当前光标位置的行号:
     x := SendMessage(Memo1.Handler, EM_LINEFROMCHAR, Memo1.SelStart, 0);
    返回当前光标位置的列号:
     y := SendMessage(Memo1.Handler, EM_LINEINDEX, -1, 0);
     z := Memo1.SelStart - y;