关键是Memo内的字符的大小有不同的!

解决方案 »

  1.   

    没有办法获得像素级的坐标,只能获得行列位置:
    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;
      

  2.   

    没有办法获得像素级的坐标,只能获得行列位置:
    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;
      

  3.   

    那么delphi自己的SQLEdit中的书签是怎么定位的呢?
    有哪位大侠知道啊!?
      

  4.   

    但是字符大小是不一样的
    用行列我还要经过计算才能定位我要把一个BookMark放在光标位子啊!
      

  5.   

    memo.CaretPos.y 行
    memo.CaretPos.x 列