-4

通常无需编写 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 则略有不同。

更新:

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

4

3 回答 3

0

在新目录中创建一个新项目,然后添加所有文件后,问题就消失了!问题似乎出在 de dproj 文件中。我也试过找到它,但它对我来说太大了。

于 2014-07-29T07:47:30.193 回答
0

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

于 2014-07-02T07:10:27.117 回答
-1

您需要在您的FormKeyUp过程中捕获“返回”按键,以便在您对其执行操作后它不会传递给操作系统:

if (Key = vkHardwareBack) then
  begin
    Key := 0;
    { Do something else }
  end;
于 2014-07-05T17:41:32.880 回答