Delphi 2010 Enter & Ctrl+Enter 编辑快捷键
Delphi 2010 Enter & Ctrl+Enter shortcuts in edits
我想在 Delphi 2010 中实现键盘快捷键,以处理 Return 和 Ctrl + Return在onkeyUp
事件中,但似乎不兼容。
我想用这段代码做的是:如果你在编辑中按 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;
我想在 Delphi 2010 中实现键盘快捷键,以处理 Return 和 Ctrl + Return在onkeyUp
事件中,但似乎不兼容。
我想用这段代码做的是:如果你在编辑中按 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;