【问题标题】:Firemonkey app out of focusFiremonkey 应用程序失焦
【发布时间】:2018-06-21 12:51:55
【问题描述】:

所以,我正在制作 firemonkey 应用程序,而对于我的 vcl 应用程序,我可以使用 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);,因此如果目前关注其他东西(浏览器),我的应用程序将始终处于领先地位。我正在尝试找到与firemonkey类似的东西,请问有什么想法吗? 附言firemonkey 的代码将放置在某些隐藏的 Tedit 的 OnChange 事件上。如果有帮助的话..

【问题讨论】:

    标签: delphi firemonkey


    【解决方案1】:

    您的代码仍然可以正常工作,只是在 FMX 中,TFormHandle 现在是 TWindowHandle 类型,而在 VCL 中它曾经是 HWND 类型。您只需要将TWindowHandle 转换为HWND,就可以像以前一样将其传递给SetWindowPos(..)

    在我选择的互联网搜索引擎中键入 firemonkey 窗口句柄 会导致许多解决方案,其中一些就在 StackOverflow 上。长话短说:使用FMX.Platform.Win.WindowHandleToPlatform(..) 进行转换。

    例子:

    implementation
    
    uses
      Fmx.Platform.Win,
      WinApi.Windows;
    
    {$R *.fmx}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
        nativeWindowHandle: HWND;
    begin
        nativeWindowHandle := Fmx.Platform.Win.WindowHandleToPlatform(Handle).Wnd;
        // TODO: Check for error when SetWindowPos returns false
        SetWindowPos(nativeWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    end;
    

    【讨论】:

    • 这确实有效!我发现它在 VCL 和 FMX 中不是同一种类型,但我不知道我可以那么容易地改变它。 Tnx 很多!
    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 2011-12-29
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多