2013-10-28 61 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真的沒有同樣的東西嗎? –