处理硬按钮vkHardwareBack

时间:2013-10-28 17:59:56

标签: delphi firemonkey delphi-xe5 firemonkey-fm2

在我的应用程序中,我使用带有3个选项卡的TTabControl:带有3个按钮的主选项卡(TabItem1):Button1将带我到TabItem2,Button2到TabItem3,按钮3到TabItem3。

我处理FormKeyUp事件以控制导航并且:

如果按下的键是vkHardwareBack,那么如果ActiveTab是TabItem1,我会弹出一条消息,询问用户是否要退出该应用程序。如果答案是肯定的,我会关闭应用程序,如果没有,则没有任何反应。这部分工作正常!

但是如果ActiveTab是TabItem2或TabItem3,那么我希望应用程序通过使用属性触发TTabChangeItem标准操作返回到主选项卡(TabItem1):

  • 标签:TabItem1
  • 方向:tdReversed
  • 交易:ttSlide

但这不会发生。当用户按下vkHardwareBack而ActiveTab是TabItem2或TabItem3时,应用程序进入后台并显示主屏幕。

任何想法我做错了什么?

这是一个FormKeyUp程序:

procedure TfMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if Key = vkHardwareBack then
    if TabControl.ActiveTab = TabItem1 then
      if MessageDlg('Are you sure you want to Exit?', TMsgDlgType.mtWarning,
           [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrYes then
        MainActivitiy.finish
     else
       ChangeTabAction1.Execute; // I tried here also: TabControl.ActiveTab := TabItem2; but still the same results
end;

1 个答案:

答案 0 :(得分:0)

也许尝试这样的事情(未经测试):

procedure TfMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  if Key = vkHardwareBack then
  begin
    Key := 0;
    if TabControl.ActiveTab = TabItem1 then
    begin
      if MessageDlg('Are you sure you want to Exit?', TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrYes then
      begin
        MainActivitiy.Finish;
      end;
    end else
    begin
      ChangeTabAction1.Execute;
    end;
  end;
end;