2013-10-28 66 views
0

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

我处理FormKeyUp事件控制导航和:

如果按下的键是vkHardwareBack那么如果ActiveTab是TabItem1,我弹出一个消息,如果用户想退出应用程序要求。如果答案是肯定的,我关闭应用程序,如果没有任何反应。这部分工作得很好!

但如果ActiveTab是TabItem2或TabItem3然后我想要的应用程序通过发射TTabChangeItem与性能标准动作回到主窗口(TabItem1):

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

但这没有发生。当用户在ActiveTab是TabItem2或TabItem3时按下vkHardwareBack时,应用程序将转到后台并显示主屏幕。

任何想法我做错了什么?

这里是一个在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; 
+0

请出示您的实际代码。 –

+0

这里是FormKeyUp程序: procedure TfMain.FormKeyUp(Sender:TObject; var Key:Word; var KeyChar:Char; Shift:TShiftState); 开始 如果key = vkHardwareBack然后 如果TabControl1.ActiveTab = TabItem1然后 如果的MessageDlg( '你确定要退出?',TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo],0)= mrYes然后 MainAcitivity.finish else ChangeTabAction.Execute else end; 当然,我尝试显式更改Tab(TabControl.ActiveTab:= TabItem1),但结果是相同的。 –

+0

请更新您的原始问题以显示验证码,但不要放在评论中。你可能想考虑在代码中加入一些“开始/结束”块,以便更清楚地说明每个“else”语句使用的“if”语句。 –

回答

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; 
+0

感谢Remi,Addint'Key:= 0; \\不是键:=#0;'程序代码结束时停止显示主页。该应用程序仍然处于活动状态,但并未导致将选项卡变为TabItem1。 我想知道为什么! –

+0

我甚至添加了下面的代码:'如果ChangeTabAction1.Execute然后ShowMessage('OK');'。我一步一步地运行它,它会转到ShowMessage(),但它不会更改标签并且不会踩出“Ok”消息! –

+0

你尝试过'MessageDlg()'而不是'ShowMessage()'吗?除此之外,你是否亲自进入'ChangeTabAction'来看看RTL实际上在做什么?我对FireMonkey并不熟悉,也不知道为什么你必须使用'Action'来更改选项卡。在VCL中,Tab控件具有直接更改选项卡的属性。 FireMonkey真的没有同样的东西吗? –