gpt4 book ai didi

delphi - TButton + VK_Return

转载 作者:行者123 更新时间:2023-12-02 00:04:00 32 4
gpt4 key购买 nike

这里我重现了我遇到过几次的情况。我有两种形式。表格 1 和表格 2。 Form1 有一个编辑字段并连接了 OnKeyup 事件。 Form2 只有一个按钮和 OnClick 相连。当在 Form1 中用户按 TEdit 类型字段中的 VK_Retrun 时,将执行 Form2.Show。 Form2 显示,焦点位于按钮上。 OnClick 事件与内部的“Close”代码 Hook 。如果用户按下键盘上的 VK_RETURN 键,Form2 将按预期关闭。但是问题来了,Form2 再次直接启动。看起来当 Form1 获得焦点时,键仍然在“队列”中,并且编辑字段将以 VK_RETURN 继续。

以下是这种情况的完整列表:

    unit UTestButton;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses UTestButton2;

{$R *.dfm}

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_Return) THEN
Form2.Show;
end;

end.

这是第二个单元。

    unit UTestButton2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;

end.

在实践中,我有时使用带有标签或信息的简单形式,但使用一两个按钮,并重点关注按钮。用户可以按预期敲击键盘上的按键。如果他使用 vk_return 并且底层控件使用该键,我必须采取一些解决方法来清除缓冲区的键,就像

    PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);

这对我来说并不完全令人满意。有没有人解决这种情况?

最佳答案

只需处理 OnKeyDown事件而不是 OnKeyUp对于您的初始编辑框:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) then
Form2.Show;
end;

关于delphi - TButton + VK_Return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780093/

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