gpt4 book ai didi

delphi - 如何读取按键输入?

转载 作者:行者123 更新时间:2023-12-03 15:27:04 30 4
gpt4 key购买 nike

我正在尝试拥有一个按键控制相机。 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(据我所知更新 4 修补程序 1)和

改用TForm.OnKeyDownTForm.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;

implementation

procedure 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 - 如何读取按键输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970587/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com