我知道Memo获取总行数用memo.lines.count取得,但是如何获取Memo中用鼠标选择部分的总行数呢?
还有,如何获得选择部分的每一行的文本?
难道需要发送什么API消息吗?麻烦大家帮下忙.

解决方案 »

  1.   

    var i,j: Integer;for i := 0 to memo1.lines.count - 1 do
    begin
      j := j + Length(memo1.lines[i]);
      if Memo1.SelStart <= j then break;
    end;   //从j或者j - 1 行开始选择,同样道理,用Memo1.SelStart + Memo1.SelLength来判断
    选择结束的行,然后自己计算选中的行数。
      

  2.   


    var
      startline,endline:Integer;
    begin
      startline := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,Memo1.SelStart,0);
      Edit1.Text := IntToStr(startline);
      endline := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,Memo1.SelStart+Memo1.SelLength,0);
      Edit2.Text := IntToStr(endline);
    end;
      

  3.   

    可以使用Memo的属性CaretPos.X来取行鼠标所在行的行数与鼠标所在行的第几位Memo.CaretPos.X 光标或鼠标所在行的列号(第几位),从0开始计数
    Memo.CaretPos.Y 光标或鼠标所在行的行号(位于Memo的第几行),从0开始计数//获取Memo中用鼠标选择部分的总行数与所选行文本
    var
      iLentgh:Integer; //鼠标选择部分的总行数
      str:string;  //鼠标所在或所选行的文本
    begin
      str:=Memo.Lines.String[Memo.CaretPos.Y
      iLength:=Length(str);
    end;
      
      

  4.   

    Memo.CaretPos.X 光标或鼠标所在行的列号(第几位),从0开始计数 
    Memo.CaretPos.Y 光标或鼠标所在行的行号(位于Memo的第几行),从0开始计数 //获取Memo中用鼠标选择部分的总行数与所选行文本 
    var 
      iLentgh:Integer; //鼠标选择部分的总行数 
      str:string;  //鼠标所在或所选行的文本 
    begin 
      str:=Memo.Lines.String[Memo.CaretPos.Y 
      iLength:=Length(str); 
    end; 
      

  5.   

    str:=Memo.Lines.String[Memo.CaretPos.Y   
    //少了一个']'
    str:=Memo.Lines.String[Memo.CaretPos.Y]