You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FMX中TWebBrowser用Edge引擎时Input点击失焦问题求助

FMX TWebBrowser EdgeOnly模式下元素点击后立即失焦问题

问题现象

  • Windows系统下,FMX应用使用TWebBrowser并设置WindowsEngine := TWindowsEngine.EdgeOnly时,网页内的<input>元素点击后会立即失去焦点
  • 多次点击后该现象消失,但通过Alt+Tab切换应用再返回后问题复现
  • 外接第二块屏幕时无此问题,切换为IEOnly模式也正常

复现环境

Delphi FMX代码

procedure TForm1.FormCreate(Sender: TObject);
begin
  var browser := TWebBrowser.Create(Self);
  browser.WindowsEngine := TWindowsEngine.EdgeOnly;
  browser.Align := TAlignLayout.Client;
  browser.URL := 'http://localhost:8000/test.html';
  Self.AddObject(browser);
end;

测试HTML文件(test.html)

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Test</title>
  </head>
  <body>
    <input type="text" name="test">
  </body>
</html>

可能的解决方法

  • 延迟设置WebBrowser焦点
    避免控件创建时和FMX窗体的焦点逻辑冲突,通过异步队列延迟赋予焦点:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      var browser := TWebBrowser.Create(Self);
      browser.WindowsEngine := TWindowsEngine.EdgeOnly;
      browser.Align := TAlignLayout.Client;
      browser.URL := 'http://localhost:8000/test.html';
      Self.AddObject(browser);
      // 异步延迟设置焦点
      TThread.Queue(nil, procedure
      begin
        browser.SetFocus;
      end);
    end;
    
  • 窗体激活时强制聚焦WebBrowser
    在窗体OnActivate事件中重新设置WebBrowser焦点,解决Alt+Tab切换后的焦点丢失问题:

    procedure TForm1.FormActivate(Sender: TObject);
    begin
      if Assigned(browser) then
        browser.SetFocus;
    end;
    
  • 调整WebView2初始化与页面加载顺序
    等待WebBrowser完全初始化后再加载页面,避免加载过程中的焦点竞争:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      var browser := TWebBrowser.Create(Self);
      browser.WindowsEngine := TWindowsEngine.EdgeOnly;
      browser.Align := TAlignLayout.Client;
      browser.OnDidFinishLoad := BrowserDidFinishLoad;
      Self.AddObject(browser);
    end;
    
    procedure TForm1.BrowserDidFinishLoad(Sender: TObject);
    begin
      var webBrowser := Sender as TWebBrowser;
      webBrowser.URL := 'http://localhost:8000/test.html';
      webBrowser.SetFocus;
    end;
    
  • 检查并调整显示器DPI设置
    单屏幕下的高DPI缩放可能导致WebView2焦点判定异常,可尝试:

    1. 将显示器缩放比例调整为100%测试
    2. 在项目文件中启用高DPI支持:
      {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE or IMAGE_FILE_DPI_AWARE}
      

内容的提问来源于stack exchange,提问作者bas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:23:17