2014-07-02 148 views
-4

通常情况下,无需编写android后退按钮功能并让您回到以前的窗体。在我的应用程序中,我正在努力,而不是回头它关闭应用程序。我也尝试通过代码处理后退按钮,但这也不起作用,它忽略了代码!Android背景按钮在Delphi XE5/XE6中无法正常工作

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

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,希望问题得到解决,但regrettingly没有。另外上面的代码是针对Delphi XE6的版本,对于XE5它略有不同。

UPDATE:

我发现我的问题修复。但我的德尔菲仍然反应非常奇怪。当我创建一个新项目并添加我之前项目中的文件时,我可以使用android后退按钮返回。但只要我再次保存该项目,然后尝试运行它,那么它就停止工作。

+0

此代码是否适用于香草应用程序? –

+0

是的,它的确如此。另外,当你查找delphi android backbutton时,你会得到这段代码。对于其他人它确实工作 – Remi

+1

因此,问题中的代码在vanilla应用程序中的行为与预期相同,但不在您的应用程序中。在这一点上,问题完全是关于应用程序中的代码而不是问题中的代码。您应用中的代码只能由您看到。我们能帮你什么吗?是时候制作一个SSCCE了。 –

回答

0

后在新目录中创建一个新项目,然后添加所有文件,这个问题已经消失了!问题似乎在de dproj文件中。我试着找到它,但找到它对我来说很重要。

0

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

+0

是的,它应该在德尔福工作,奇怪的是,在我的另一个项目中,它确实有效。而事情是我不必为此做任何事情 – Remi

-1

你所需要的疏水阀在FormKeyUp过程中的“后退”按键,使其不传递到你的操作系统采取行动之后:

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