【发布时间】:2016-05-16 15:32:00
【问题描述】:
我有 2 个简单的表单,Form1 和 Form2 (Delphi 7)。 Form1 打开 Form2,然后我等待特定的组合键 (Ctrl + F2)。关闭 Form2 并返回 Form1 后,我需要检查是否按下了 Ctrl 键。这是一个例子:
FORM2
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = VK_F2) then
ShowMessage('Ctrl + F2 pressed!');
end;
FORM1
procedure TForm1.btn1Click(Sender: TObject);
begin
Try
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Finally
Form2.Release;
Form2 := nil;
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
if (GetAsyncKeyState(VK_Control) <> 0) then
ShowMessage('Ctrl is pressed!');
end;
问题是,每次我在Form2上按Ctrl + F2,似乎Ctrl键卡住了,(GetAsyncKeyState(VK_Control) 0)总是返回true。
请问,您知道发生了什么(以及如何解决)吗?
【问题讨论】:
-
附带说明,您应该使用
Form2 := TForm2.Create(nil)而不是Application.CreateForm(TForm2, Form2),并使用Form2.Free而不是Form2.Release。CreateForm()与直接调用Create()相比没有任何好处,除非在创建 MainForm 时,而Release()用于当 Form 需要在其自己的事件处理程序中释放自身时使用,在这种情况下使用 @ 是不安全的987654330@.