2013-08-14 5 views
2

의 위치를 ​​캐럿 위해 Mousecursor 좌표 제공합니다. 마우스 좌표에서 CaretPosition을 계산하는 방법이 있습니까?마우스 좌표가 Firemonkeys 잇는 TMemo 구성 요소에 마우스/드래그를 & 드롭 이벤트 처리 Firemonkey 잇는 TMemo 컴포넌트

은 내가 잇는 TMemo에 텍스트를 드래그 할이 텍스트는 현재 MouseCoordinates에 삽입해야합니다.

+1

아야! 프레임 워크가 이것을 구현하지 않습니까? 그렇지 않으면 실망 할 것입니다. –

답변

5

시도 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; 
+0

'FMX.Memo.TMemo.GetPointPosition'은 XE2에서만 사용 가능한 것으로 보입니다. XE4에서 이동되었거나 삭제 되었습니까? –

+0

예, XE3에서 제거 된 것으로 보입니다. –

+0

'GetPointPosition'는 FMX.Memo.pas에 정의 된'TMemoLines'의 회원 기능입니다. 불행히도 이것은 개인적인 유형입니다. 'TMemo'의'lines '멤버는'TStrings'로 정의되었지만'TMemoLines'으로 생성되었습니다. 잠시 후에이 기능을 사용할 실제 방법이 없습니다. –

관련 문제