Delphi 使用Ctrl+清空TMemo;进入
我正在努力实现的目标:Delphi 使用Ctrl+清空TMemo;进入,delphi,delphi-xe2,Delphi,Delphi Xe2,我正在努力实现的目标: 用户在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
- 用户在TMemo框中输入文本
- 如果按Enter键,则会创建一条新行
- 如果按Ctrl+Enter,则会将文本移动到另一个框并清空TMemo
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键,因为光标位于第二行闪烁
感谢您的帮助。谢谢大家! 处理此问题的最佳方法如下:
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;
在这段代码中,我假设有多个备忘录,并且文本在选项卡顺序中从一个备忘录移动到下一个备忘录。但你的需求可能会有所不同。在这种情况下,我相信很明显您需要为您的场景做什么。使用备忘录的OnKeyPress事件:
property WantReturns: Boolean;
procedure TFMsg.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#10) and (GetKeyState(VK_CONTROL)<0) then
begin
key:=#0;
btnSendClick(Sender);
end;
end;
procedure TFMsg.Memo1KeyPress(发送方:TObject;变量键:Char);
开始
if(key=#10)和(GetKeyState(VK_控件)非常棒,谢谢。除了尝试类似操作的人之外,Ctrl+Enter不是Object Inspector中的默认选项之一。FormCreate中的这一行手动添加了它:Action1.ShortCut:=快捷方式($0D,[ssCtrl])
。只写代码的帖子不被视为答案,特别是当它们只包含一行内容并且没有任何附加值时。您能否对您的答案提供一些解释?如果没有,它可能会被删除为“非答案”。谢谢。有关“只写代码的答案”不合适的原因的讨论,请参阅。