将C# WinForms窗口嵌入Delphi 7后WebView2无法接收键盘输入的问题求助
将C# WinForms窗口嵌入Delphi 7后WebView2无法接收键盘输入的问题求助
大家好,我最近在给老旧的Delphi7桌面程序做改造,想集成一个现代Web界面——具体是把一个基于WebView2的C# WinForms程序,通过Windows API嵌入到Delphi的Panel控件里。
单独运行这个C#程序时一切正常,但用SetParent把它嵌入Delphi的Panel后,问题就来了:WebView2能正常渲染页面,鼠标点击、滚动这些操作都没问题,但键盘输入完全传不到WebView的文本框里,具体表现如下:
具体症状
点击WebView里的输入框时:
- 输入框内能正常显示光标
- 鼠标的各种操作都正常响应
- 但敲击键盘时,输入的字符会跑到之前获得焦点的Delphi控件里,完全不进WebView的输入框
举个实际操作的场景:
- 先点击Delphi界面上的一个Edit编辑框
- 再点击WebView里的输入框(能看到光标在输入框内闪烁)
- 开始打字
- 结果所有输入的文字都出现在刚才的Delphi Edit框里,WebView输入框里啥都没有
下面是我用到的关键代码,麻烦各位帮忙看看哪里出了问题:
Delphi 端代码
SetParent(FAgenteHandle, pnlAgenteHost.Handle); Style := GetWindowLong(FAgenteHandle, GWL_STYLE); Style := Style and not WS_POPUP; Style := Style or WS_CHILD or WS_VISIBLE; SetWindowLong(FAgenteHandle, GWL_STYLE, Style); SetWindowPos( FAgenteHandle, 0, 0, 0, pnlAgenteHost.ClientWidth, pnlAgenteHost.ClientHeight, SWP_NOZORDER or SWP_FRAMECHANGED );
C# WinForms 端代码
public partial class Agente : Form { private readonly WebView2 web = new WebView2(); public Agente() { InitializeComponent(); FormBorderStyle = FormBorderStyle.None; ShowInTaskbar = false; web.Dock = DockStyle.Fill; web.TabStop = true; Controls.Add(web); } protected override async void OnLoad(EventArgs e) { base.OnLoad(e); await web.EnsureCoreWebView2Async(null); web.Source = new Uri("https://example.com"); } }
有没有朋友遇到过类似的嵌入窗口焦点/键盘输入问题?或者知道怎么让键盘输入正确传递给嵌入的WebView2?麻烦给点思路,非常感谢!
备注:内容来源于stack exchange,提问作者Roberto Vieira
相关产品推荐
相关产品推荐

