gpt4 book ai didi

delphi - 如果完成任何操作,如何设置变量(在 Delphi 中)?

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

我需要以某种方式在 Delphi 2009 中实现这个:

用户单击按钮 2。如果用户的最后一个操作是单击按钮 1,那么我想做一件事,但如果用户的最后一个操作是其他操作,我想做另一件事。

显然,我设置了一个 bool 变量:UserClickedOnButton1,并在单击按钮 1 时将其设置为 true,然后在按钮 2 的 OnButtonClick 事件中测试该变量。

我的问题是,每当用户在单击按钮 2 之前执行其他任何操作(例如按鼠标、按键、箭头键、切换到另一个程序或其他任何操作)时,如何将其设置为 false。

...或者有没有一种我忽略的更简单的方法来做到这一点。

最佳答案

下面的代码似乎可以工作(D7),但请检查您的具体情况。

type
TButton = class(StdCtrls.TButton)
private
FClickedLast: Boolean;
FNextButton: TButton;
protected
procedure WndProc(var Message: TMessage); override;
public
procedure Click; override;
property ClickedLast: Boolean read FClickedLast write FClickedLast;
property NextButton: TButton write FNextButton;
end;

TForm1 = class(TForm)

...

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.NextButton := Button2;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if Button1.ClickedLast then
Caption := Caption + ' +'
else
Caption := Caption + ' -';
Button1.ClickedLast := False;
end;

{ TButton }

procedure TButton.Click;
begin
inherited Click;
if (FNextButton <> nil) and Focused then
FClickedLast := True;
end;

procedure TButton.WndProc(var Message: TMessage);
begin
if (FNextButton <> nil) and not (csDestroying in ComponentState) then
case Message.Msg of
CM_CANCELMODE,
WM_KEYFIRST..WM_KEYLAST:
FClickedLast := False;
WM_KILLFOCUS:
if TWMKillFocus(Message).FocusedWnd <> FNextButton.Handle then
FClickedLast := False;
end;
inherited WndProc(Message);
end;

说明:

  • CM_CANCELMODE 处理任意位置的鼠标点击,不会导致焦点改变,
  • WM_KEY* 处理所有按键事件,但也切换到另一个应用程序(有一个 WM_SYSKEYDOWN,否则由 WM_KILLFOCUS 负责),
  • WM_KILLFOCUS 处理其他所有事情。

关于delphi - 如果完成任何操作,如何设置变量(在 Delphi 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839561/

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