TEmbeddedWB控件Bug导致代码输入助手不能弹出的解决办法
作者:橙子、刘啸
2009-06-17
http://www.cnpack.org
TEmbeddedWB控件存在一个Bug,设计期被拖放到窗体上而创建实例时,会不必要地挂接全局的系统消息,并且不会将处理的消息依次再派发出去,导致CnWizards的代码输入助手无法获得编辑器中的按键消息,从而无法弹出。
躲开此问题的方法,可修改TEmbeddedWB控件源码的Create过程,使其EnableMessageHandler 过程在设计期间不调用即可。
也就是将:
constructor TEmbeddedWB.Create(Owner: TComponent);
begin
inherited;
{$IFDEF DELPHI_5_UP}
EnableMessageHandler;
{$ENDIF}
GetDDEVariables;
{$IFDEF DELPHI_6_UP}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
DDEHWND := AllocateHWnd(DDEWndProc);
{$IFDEF DELPHI_6_UP}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
FAbout := 'Embedded Web Browser. ' + SITE_ADDRESS;
FUserAgent := 'Mozilla/4.0(Compatible-EmbeddedWB' + VER_NUM + SITE_ADDRESS;
........ 以下代码省略
改为:
constructor TEmbeddedWB.Create(Owner: TComponent);
begin
inherited;
if not (csDesigning in ComponentState) then
begin
{$IFDEF DELPHI_5_UP}
EnableMessageHandler;
{$ENDIF}
GetDDEVariables;
{$IFDEF DELPHI_6_UP}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
DDEHWND := AllocateHWnd(DDEWndProc);
{$IFDEF DELPHI_6_UP}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
end;
FAbout := 'Embedded Web Browser. ' + SITE_ADDRESS;
FUserAgent := 'Mozilla/4.0(Compatible-EmbeddedWB' + VER_NUM + SITE_ADDRESS;
......以下代码省略
然后重新编译安装TEmbeddedWB组件即可。
此修改能使CnWizards的代码助手能够正常弹出,并且程序编译后运行时由于是非设计期状态,因此也不会影响控件运行期的正常功能。 |