我正在努力实现的目标:
我正在使用此代码[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;
实际发生了什么:
感激不尽的任何帮助。谢谢!
答案 0 :(得分:7)
处理此问题的最佳方法如下:
请注意,您无需将操作附加到任何内容。仅仅存在就足以确保处理快捷方式。
对于使用修饰键的复合键盘动作,使用动作快捷键总是最简单的,因此与较低级别的键盘处理代码保持一定距离。
您的操作处理程序可能如下所示:
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键顺序中的下一个备忘录。但您的需求可能会有所不同。在这种情况下,我确信你需要为你的场景做些什么。
答案 1 :(得分:0)
使用备忘录的OnKeyPress事件:
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;
请注意,您必须检查换行(#10),而不是回车(#13)。
答案 2 :(得分:-1)
property WantReturns: Boolean;