Android后退按钮在Delphi XE5 / XE6中不起作用

时间:2014-07-02 07:04:16

标签: android delphi back-button delphi-xe5 delphi-xe6

通常无需编写Android后退按钮功能,并让您回到上一个表单。在我的应用程序中,我正在努力而不是返回它关闭应用程序。我也尝试通过代码处理后退按钮,但这也没有用,它忽略了代码!

以下是我用来处理后退按钮的代码:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  var KeyChar: Char; Shift: TShiftState);
var
  FService: IFMXVirtualKeyboardService;
begin
  if Key = vkHardwareBack then
  begin
    TPlatformServices.Current.SupportsPlatformService
      (IFMXVirtualKeyboardService, IInterface(FService));
    if (FService <> nil) and (TVirtualKeyboardState.Visible
      in FService.VirtualKeyBoardState) then
    begin
      // Back button pressed, keyboard visible, so do nothing...
    end
    else
    begin
      // Back button pressed, keyboard not visible or not supported on this platform
      close;
    end;
  end;
end;

我曾经使用Delphi XE5,现在我使用XE6并希望问题得到解决,但遗憾的是没有。上面的代码也适用于Delphi XE6版本,对于XE5,它略有不同。

更新

我找到了解决问题的方法。但我的德尔福仍然反应很奇怪。当我创建一个新项目并添加我之前项目中的文件时,我可以使用android后退按钮返回。但是,一旦我再次保存项目然后尝试运行它,它就会停止工作。

3 个答案:

答案 0 :(得分:0)

后退按钮在android framework- onBackPressed()中有一个特殊功能。我不知道它是否被移植到Delphi,但我认为是这样。它不会通过该API

答案 1 :(得分:0)

在新目录中创建一个新项目,然后在项目中添加所有文件后,问题就消失了!这个问题好像出现在de dproj文件中。我也尝试过找到它,但找到它对我来说很重要。

答案 2 :(得分:-1)

您需要在FormKeyUp程序中捕获“后退”按键,以便在您对其执行操作后不会将其传递给操作系统:

if (Key = vkHardwareBack) then
  begin
    Key := 0;
    { Do something else }
  end;