delphi 嵌入网页回车触发不了页面submit事件,如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 嵌入网页回车触发不了页面submit事件,如何解决?相关的知识,希望对你有一定的参考价值。

此时焦点已经定位到查询按钮上了,查询界面是delphi中嵌套的jsp网页,查询是一个submit提交按钮,
<input name="Submit1" type="submit" id="Submit1" value="查询" class="btn3_mouseout">
但是任凭怎么按回车键,都触发不了这个查询事件,改如何处理,求大神啊????

这个问题其实非常的复杂。

因为Delphi在编写Webbrowser的时候,没有正确地编写快捷键的翻译程序。所以导致出现了这个问题。如果你想要解决这个问题的话。就必须首先改正Webbrowser的这个Bug.

解决方法如下:

    首先从你的Delphi源码目录中找出OleCtrls.pas文件。然后复制这个文件到你工程目录,并添加到你的工程中。

    修改你复制的OleCtrls.pas文件,首先从这个文件中找到TOleControl.WndProc函数,然后在这个函数中找到这一行:
    WinMsg.HWnd := Handle;
    将此行改为
    WinMsg.HWnd := GetFocus;

    因为Webbrowser可能存在焦点定位错误的问题。所以,同样需要复制SHDocVw.pas文件到你的目录,并添加到你的工程中。并在重载TWebbrowser的WndProc函数:

procedure TWebbrowser.WndProc(var Msg: TMessage);
begin
  try
    case Msg.Msg of
      WM_SETFOCUS:
      begin
        GetParentForm(Self).ActiveControl := nil; WinApi.Windows.SetFocus(Handle); Exit;
      end;
      CM_VISIBLECHANGED,WM_MOUSEACTIVATE:
        if TWinControl(Self).Visible then
          GetParentForm(Self).ActiveControl := nil;
    end;
  except

  end;
  inherited;
end;

另外,你如果使用的是Delphi XE2 以上的版本,OleCtrls单元的名称可能为Vcl.OleCtrls。你可能需要在ShdocVw单元中引用Forms、Messages与Controls单元。

参考技术A 捕获keydown、keypress、keyup的事件,处理当keyCode = 13的时候去调用一下就行,如果还是不会的话继续联系我jialiu830205@163.com

以上是关于delphi 嵌入网页回车触发不了页面submit事件,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 页面屏蔽回车触发button按钮事件

如何用js或jquery实现点击事件触发键盘

delphi中如何嵌入网页?

delphi中,Tab键能移动光标到下一个编辑框,按回车键为何进入不了下一编辑框?

Element UI 中el-input 框回车触发页面刷新问题及解决方案

Element UI 中el-input 框回车触发页面刷新问题及解决方案