当在memo中打ctrl+回车时,光标下移一行,这时我想使光标通过程序回到最左上角,并清空memo。清空完成了,可是光标却怎么也不上去。用了以前一个 贴子里的:memo1.perform(WM_LBUTTONDOWN,0,makelong(0,0));可以上去,但是再打字打不进去了,必须得按一下鼠标左键;用以前贴子的memo1.caretpos:=point(0,0)不好使。

解决方案 »

  1.   

    Memo1.Perform(EM_LINEINDEX,0,0);
    Memo1.Perform(EM_LINEINDEX,Memo1.Perform(EM_LINEFROMCHAR,-1,0),0);
      

  2.   

    找到的,你看看好不好使;
    Delphi中有控件MEMO,当使用应控件输入内容或编辑时,如何确定光标当前的位置呢?这时就可以调用WINDOWS API中的EM_LINEFROMCHAR和EM_LINEINDEX消息来确定MEMO控件中光标的当前行和列,具体调用方法的过程如下:procedure TForm1.Button1Click(Sender: TObject);
    var
    LineNum:longint;
    CharsBeforeLine:longint;
    begin 
    LineNum := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,
                Memo1.SelStart,0);
    CharsBeforeLine:=SendMessage(Memo1.Handle,EM_LINEINDEX,
                LineNum,0);
    Label1.Caption:='Line: '+IntToStr(LineNum + 1);
    Label2.Caption:='Position: '+IntToStr((Memo1.SelStart -
                     CharsBeforeLine)+1);
    end;//另一种方法
      定义变量iLine: Integer;
                { 使用em_LineFromChar消息 }
                iLine := Memo1.Perform(em_LineFromChar, $FFFF, 0);
                { 第一行为0 }
                messageDlg('行号: ' + IntToStr(iLine), mtInformation,[mbOK], 0 ) ;
      

  3.   

    Memo1.Perform(EM_LINEINDEX,0,0);
    Memo1.Perform(EM_LINEINDEX,Memo1.Perform(EM_LINEFROMCHAR,-1,0),0);
    这两个不好用设置一下焦点: 根本不行。
      你可以自己试一试,在一个MEMO控件中,打一行字,回车,然后光标到第二行,你用什么都弄不上去!除非你不在程序里,而在运行时用鼠标或键盘!