用caretPos可以得到(Line,Col),但不是像素位置,不知如何转换?
或者有其他办法?

解决方案 »

  1.   

    GetCursorPos得到位置以后转换一下不行吗?
      

  2.   

    //用TTextMetric可以作到,但有一点就是行能作到很精确,但是列
    //就作不到很精确,因为不同的字符,即使Font一样,其宽度也可
    //能不一样,所以只能取一个平均值。
    procedure TForm1.CoolButton1Click(Sender: TObject);
    var
      Metric:TTextMetric;
      Col,Row:Integer;
      P:TPoint;
    begin
      Canvas.Font:=Memo1.Font;
      //Memo没有Canvas属性,所以只有借助于Form的Canvas来取TextMetric
      GetTextMetrics(Canvas.Handle,Metric);
      P:=Memo1.CaretPos;
      Row:=(Metric.tmHeight+Metric.tmInternalLeading)*P.Y;
      //tmHeight为字符高度,tmInternalLeading为行间距
      Col:=(Metric.tmAveCharWidth)*P.X;
      //tmAveCharWidth为字符平均宽度。
      ShowMessage(Format('(%d,%d)',[Col,Row]));
    end;
    //有关TextMetric用法,可以参考<<Delphi5.0开发人员指南>>的22.2节内容。