我需要以某种方式在Delphi 2009中实现它:
用户单击按钮2.如果用户的最后一个操作是单击按钮1,那么我想做一件事,但如果用户的最后一个操作是其他任何操作,我想做另一件事.
显然,我设置了一个布尔变量:UserClickedOnButton1并在单击按钮1时将其设置为true,然后在Button 2的OnButtonClick事件中测试该变量.
我的问题是,在点击按钮2之前,如果用户完成其他任何操作,我该如何将其设置为false.(例如,鼠标按下,按键,箭头键,切换到另一个程序或其他任何内容).
...或者有一种更简单的方法可以做到这一点,我忽略了.
NGL*_*GLN 10
下面的代码似乎有用(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;
Run Code Online (Sandbox Code Playgroud)
说明: