2013-10-28 2 views
0

내 응용 프로그램에서는 3 개의 탭이있는 TTabControl을 사용합니다. 3 개의 버튼이있는 기본 탭 (TabItem1) : Button1은 나를 TabItem2로, Button2는 TabItem3으로, 버튼 3은 TabItem3으로 이동합니다. 나는 사용자가 응용 프로그램을 종료하고자하는 경우 묻는 메시지가 팝업의 ActiveTab가 TabItem1 경우 누른 키가 다음 vkHardwareBack 경우하드 버튼 처리 vkHardwareBack

:

나는 FormKeyUp 이벤트는 탐색 및 제어하는 ​​처리합니다. 대답이 '예'인 경우 응용 프로그램을 닫고 아무 것도 일어나지 않으면. 이 부분은 잘 작동합니다!

그러나 ActiveTab이 TabItem2 또는 TabItem3 경우 그때 특성을 가진 TTabChangeItem 표준 행동 발사에 의해 메인 탭 (TabItem1)로 돌아갈 수있는 응용 프로그램을 원하는 :

  • 탭 : TabItem1
  • 방향 : tdReversed를
  • 거래 : ttSlide 그러나 이런 일이되지

. ActiveTab이 TabItem2 또는 TabItem3 인 동안 사용자가 vkHardwareBack을 누르면 응용 프로그램이 백그라운드로 이동하고 홈 화면이 표시됩니다.

어떤 아이디어 내가 잘못 했습니까?

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

실제 코드를 보여주십시오 여기

그리고는 a를 FormKeyUp 절차입니다. –

+0

여기 FormKeyUp 프로 시저가 있습니다 : 프로 시저 TfMain.FormKeyUp (보낸 사람 : TObject, var 키 : Word, var KeyChar : Char; Shift : TShiftState); 이 시작하면 키 = vkHardwareBack 다음 경우 TabControl1.ActiveTab = TabItem1 다음 경우는 MessageDlg (TMsgDlgType.mtWarning, '당신이 종료 하시겠습니까? 확실 해요', [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrYes then MainAcitivity.finish else ChangeTabAction.Execute else end; 물론 Tab (TabControl.ActiveTab : = TabItem1)의 명시적인 변경을 시도했지만 그 결과는 동일합니다. –

+0

원래 질문을 코드를 업데이트하도록 수정하십시오. 주석에 넣지 마십시오. 그리고 각'else' 문이 어떤'if' 문과 함께 있는지 명확하게하기 위해 코드에'begin/end' 블록을 두는 것에 대해 생각할 수도 있습니다. –

답변

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

다음 코드도 추가했습니다 : If ChangeTabAction1.Execute then ShowMessage ('OK');'. 나는 한 단계 씩 실행했는데, ShowMessage()로 간다.하지만 탭을 변경하지 않고 "Ok"메시지를 구두에 넣지 않는다. –

+0

'ShowMessage()'대신'MessageDlg()'을 시도 했습니까? 그 외에, RTL이 실제로하고있는 것을보기 위해'ChangeTabAction' 자체에 들어갔습니까? 필자는 FireMonkey에 익숙하지 않아 왜 탭을 변경하기 위해'Action'을 사용해야하는지 알지 못합니다. VCL에서 탭 컨트롤에는 탭을 직접 변경하는 속성이 있습니다. FireMonkey는 실제로 같은 것을 가지고 있지 않습니까? –