delphi – 如何读取键输入?

delphi – 如何读取键输入?,第1张

概述我想要一个关键控制相机. TForm没有Onkeypress所以如何从键盘读取这个输入? procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);var ok: boolean;begin ok := true; case Key of 'a': camera1.Position.y:=camera1.Po 我想要一个关键控制相机. TForm没有Onkeypress所以如何从键盘读取这个输入?

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);var  ok: boolean;begin  ok := true;  case Key of    'a': camera1.position.y:=camera1.position.y+1;    'A': camera1.position.y:=camera1.position.y+1;    'd': camera1.position.y:=camera1.position.y-1;    'D': camera1.position.y:=camera1.position.y-1;    'w': camera1.position.X:=camera1.position.X-1;    'W': camera1.position.X:=camera1.position.X-1;    'x': camera1.position.X:=camera1.position.X+1;    'X': camera1.position.X:=camera1.position.X+1;    'q': camera1.RotationAngle.z := camera1.RotationAngle.z-1;    'Q': camera1.RotationAngle.z := camera1.RotationAngle.z-1;    'e': camera1.RotationAngle.z := camera1.RotationAngle.z+1;    'E': camera1.RotationAngle.z := camera1.RotationAngle.z+1;    'z': camera1.position.z:=camera1.position.z+1;    'Z': camera1.position.z:=camera1.position.z+1;    'c': camera1.position.z:=camera1.position.z-1;    'C': camera1.position.z:=camera1.position.z-1;    else      ok := false;  end; {case}  //if ok then   // InvalIDate;  positionChange(camera1);  RotationAngleChange(camera1);end;
解决方法 更新到最新版本的XE2(AFAIK Update 4 Hotfix 1)和

请改用TForm.OnKeyDown或TForm.OnKeyUp事件.这是我用过的快速测试:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;  Shift: TShiftState);begin  case KeyChar of    'A'..'Z','a'..'z': Caption := 'Got an Alpha ' + KeyChar;    '0'..'9': Caption := 'Got a number ' + KeyChar;  else    Caption := 'Got something else ' + KeyChar;  end;  KeyChar := #0;end;

根据这个Embarcadero forums post,在没有上述更新的XE2中你需要实际覆盖TForm.KeyDown事件(根据@ TLama的请求添加;他是找到它并在评论中发布到我的答案的人):

type  TForm1 = class(TForm)    Memo1: TMemo;  private  public    procedure KeyDown(var Key: Word; var KeyChar: Char;       Shift: TShiftState); overrIDe;  end;implementationprocedure TForm1.KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;  Shift: TShiftState);begin  case KeyChar of    'A'..'Z','a'..'z': Caption := 'Got an Alpha ' + KeyChar;    '0'..'9': Caption := 'Got a number ' + KeyChar;  else    Caption := 'Got something else ' + KeyChar;  end;  KeyChar := #0;end;

(就像一个注释,你可以稍微缩短你的代码):

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;  Shift: TShiftState);begin  ok := true;  case KeyChar of    'A','a': camera1.position.y:=camera1.position.y+1;    'D','d': camera1.position.y:=camera1.position.y-1;    'W','w': camera1.position.X:=camera1.position.X-1;    'X','x': camera1.position.X:=camera1.position.X+1;    'Q','q': camera1.RotationAngle.z := camera1.RotationAngle.z-1;    'E','e': camera1.RotationAngle.z := camera1.RotationAngle.z+1;    'Z','z': camera1.position.z:=camera1.position.z+1;    'C','c': camera1.position.z:=camera1.position.z-1;  else    ok := false;  end; {case}  if ok then  begin   // InvalIDate;   KeyChar := #0;  // Remove keystroke,because you've handled it  end;  positionChange(camera1);  RotationAngleChange(camera1);      end;
总结

以上是内存溢出为你收集整理的delphi – 如何读取键输入?全部内容,希望文章能够帮你解决delphi – 如何读取键输入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1245999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存