微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 使用Ctrl Enter清空TMemo

我想要完成的事情:

>用户将文本输入TMemo框
>如果按Enter键,则会创建一个新行
>如果他们按Ctrl Enter键,它会将文本移动到另一个框并清空TMemo

我正在使用此代码[KeyPreview为True]:

procedure TFMsg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = $0D) then
  begin
    Key := 0;
    btnSendClick(Sender); //this moves the text and empties the TMemo Box
  end;
end;

实际发生了什么:

> Ctrl Enter将文本发送到另一个
> TMemo清空但似乎接受了Enter键,因为光标在第二行闪烁

任何帮助感激不尽.谢谢!

解决方法

处理此问题的最佳方法如下:

>创建操作列表或操作管理器,或重新使用现有操作列表.
>添加清除备忘录并移至下一个备忘录的操作.您需要检查活动控件是否真的是备忘录.
>为操作提供所需的快捷方式,按CTRL ENTER.

请注意,您无需将操作附加到任何内容.仅仅存在就足以确保处理快捷方式.

对于使用修改键的复合键盘操作,使用操作快捷键总是最简单的,因此与较低级别的键盘处理代码保持一定的距离.

您的操作处理程序可能如下所示:

if ActiveControl is TMemo then
begin
  Memo := TMemo(ActiveControl);
  Text := Memo.Text;
  Memo.Clear;
  SelectNext(Memo,True,True);
  if ActiveControl is TMemo then
  begin
    Memo := TMemo(ActiveControl);
    Memo.Text := Text;
  end;
end;

在这代码中,我假设有多个备忘录,并且文本从一个备忘录移动到Tab键顺序中的下一个备忘录.但您的需求可能会有所不同.在这种情况下,我确信您需要为您的方案做些什么.

原文地址:https://www.jb51.cc/delphi/239400.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐