如果完成任何操作,如何设置变量(在Delphi中)?
发布时间:2020-12-15 09:41:33 所属栏目:大数据 来源:网络整理
导读:我需要以某种方式在Delphi 2009中实现它: 用户单击按钮2.如果用户的最后一个操作是单击按钮1,那么我想做一件事,但如果用户的最后一个操作是其他任何操作,我想做另一件事. 显然,我设置了一个布尔变量:UserClickedOnButton1并在单击按钮1时将其设置为true,然
我需要以某种方式在Delphi 2009中实现它:
用户单击按钮2.如果用户的最后一个操作是单击按钮1,那么我想做一件事,但如果用户的最后一个操作是其他任何操作,我想做另一件事. 显然,我设置了一个布尔变量:UserClickedOnButton1并在单击按钮1时将其设置为true,然后在Button 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处理其他所有事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |