处理Firemonkey上的鼠标/拖放事件TMemo Component提供了Mousecursor坐标。有没有一种方法可以根据鼠标坐标来计算CaretPosition?

我想将文本拖到TMemo中,并且此文本应插入到当前的MouseCoordinates中。

最佳答案

尝试呼叫GetPointPosition

不幸的是,这似乎已从XE3中的TMemo中删除。作为一种快速而肮脏的解决方法,您可以尝试以下操作:

function GetPointPosition(Memo: TMemo; Pt: TPointF; RoundToWord: Boolean = False): TCaretPosition;
var
  I, LPos: Integer;
  Rgn: TRegion;
begin
  Result.Line := -1;
  Result.Pos := -1;
  for I := 0 to Memo.Lines.Count - 1 do
  begin
    if Memo.Lines.Objects[I] is TTextLayout then
    begin
      LPos := TTextLayout(Memo.Lines.Objects[I]).PositionAtPoint(Pt, RoundToWord);
      if LPos >= 0 then
      begin
        if LPos > 0 then
        begin
          Rgn := TTextLayout(Memo.Lines.Objects[I]).RegionForRange(TTextRange.Create(LPos, 1), RoundToWord);
          if (Length(Rgn) > 0) and (Rgn[0].Top > Pt.Y) then
            Dec(LPos);
        end;
        Result.Line := I;
        Result.Pos := LPos;
        Break;
      end;
    end;
  end;
end;

关于delphi - 鼠标坐标到Firemonkey TMemo组件中的插入位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18224549/

10-09 09:32