代码之家  ›  专栏  ›  技术社区  ›  Muhammad Alkarouri

在丰富的编辑中保持插入符号在文本末尾

  •  1
  • Muhammad Alkarouri  · 技术社区  · 15 年前

    我正在Delphi(2009)中使用TRichEdit组件编写一个编辑器。编辑器是append only,即插入符号必须始终位于末尾,同时保持使用鼠标从组件的其他位置进行复制的能力。

    它目前的工作方式是在写东西的时候将插入符号移到末尾,但是当单击文本的其他部分时,是否可以使插入符号不跟随鼠标?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Andreas Rejbrand    15 年前

        2
  •  2
  •   Remy Lebeau    15 年前

    不能。插入符号必须移动,用户才能用鼠标或键盘进行选择。每次插入新文本时,必须将插入符号移到末尾。在每次插入期间,您可能还应该保留并恢复用户当前的插入符号位置,例如:

    procedure TForm.AppendText(const S: String);
    var
      OldCharRange, NewCharRange: TCharRange;
    begin
      SendMessage(RichEdit1.Handle, EM_EXGETSEL, 0, LParam(@OldCharRange));
      try
        NewCharRange.cpMin := RichEdit1.GetTextLen;
        NewCharRange.cpMax := NewCharRange.cpMin;
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@NewCharRange));
        RichEdit1.SelText := S;
      finally
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@OldCharRange));
      end;
    end;
    
    推荐文章