Delphi 2010 Enter & Ctrl+Enter 编辑快捷键

Delphi 2010 Enter & Ctrl+Enter shortcuts in edits

我想在 Delphi 2010 中实现键盘快捷键,以处理 ReturnCtrl + ReturnonkeyUp事件中,但似乎不兼容。

我想用这段代码做的是:如果你在编辑中按 Enter 它会在列表框中添加一个元素,如果你按 Ctrl+输入 修改活动元素

我的代码是这样的:

 procedure TForm5.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
 begin     
  if GetKeyState(VK_RETURN) < 0 then
  lb1.items[lb1.ItemIndex]:=edit1.Text;

if GetKeyState(VK_CONTROL) < 0 then
 case Key of
  VK_RETURN:begin
            lb1.Items.Add(Edit1.text);
            lb1.ItemIndex:=lb1.Items.Count-1;
            label3.caption:='Nº de Registros:'+inttostr(lb1.Items.Count);
           end;

and 运行 when return and ctrl+return 被使用。但是我似乎不知道自己做错了什么,因为我 执行代码并在按下 enter 时执行代码,并在按下 Ctrl+enter 时执行代码。

你可能想要这个:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then
  begin
    if ssCtrl in Shift then
      ShowMessage('CONTROL: ' + Edit1.Text)
    else
      ShowMessage(Edit1.Text);
    Key := 0;
  end;
end;

(我选择使用 OnKeyDown 而不是 OnKeyUp 因为这是在这种情况下的正常选择,但它与 OnKeyUp 的工作方式完全相同。)

即:如果关键是Return,则行动。并且,根据 Ctrl 修饰符是否按下来采取不同的操作。请注意,无需调用 GetKeyState,因为事件处理程序在其参数中为您提供了此信息。

您的代码将无法运行,因为它的逻辑有缺陷。

但是,上面的代码片段并不理想,因为当您按 (Ctrl+)Return.

时,Windows 会发出“无效输入蜂鸣声”

要避免这种情况,还要添加以下 OnKeyPress 处理程序:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key in [#13, #10] then
    Key := #0;
end;