说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

ActiveForm在IE中不停的重画?请问为什么?

编辑:说三道四文库 发布时间:2018-04-23 02:21
HTML文档下载 WORD文档下载 PDF文档下载
你好!我写了一个activeform,上面放了几个panel,什么操作也没有,为什么只是稍微拖动ie,
form的重画就非常严重,activeform的画面都变形了!我想自己处理OnPaint,
但ActiveForm的OnPaint的事件并没有被触发?
请教各位该如何解决呢?我觉得重画操作不应该有我作,而是系统自己会处理。
这是delphi的一个bug

将Delphi5安装目录下Borland\Delphi5\Source\Vcl\axctrls.pas文件考出,放在一个临时目录中。

用Delphi新建一个工程,保存在该临时目录中,在此工程中加入axctrls.pas(用Project菜单下的Add to Project...), 在Component List中,打开TActiveXControl下的Protected节点,双击SetObjectRects,则看到下面的代码

function TActiveXControl.SetObjectRects(const rcPosRect: TRect;
  const rcClipRect: TRect): HResult;
var
  WinRect: TRect;
begin
  try
    IntersectRect(WinRect, rcPosRect, rcClipRect);
    FWinControl.BoundsRect := rcPosRect;
    Result := S_OK;
  except
    Result := HandleException;
  end;
end;

将FWinControl.BoundsRect := WinRect; 中的 WinRect 换成 rcPosRect, 然后运行工程编译,将axctrls.dcu 文件考到Borland\Delphi5\lib及Borland\Delphi5\lib\Debug下,将原有文件覆盖即可.
楼上的大侠很牛啊!呵呵,虽然还没有试验,但是佩服啊!
其实上面的代码就是 Delphi 3/4 版本的 axctrls.pas 中的。所以用 Delphi 3/4 开发 ActiveXForm 是没有问题的。但是 Delphi 5 的 axctrls.pas 做了改动,反而出现了问题。所以只要照着 Delphi 3/4 版本的 axctrls.pas 改动一下这个位置就可以了。
这是delphi的一个bug

将Delphi5安装目录下Borland\Delphi5\Source\Vcl\axctrls.pas文件考出,放在一个临时目录中。

用Delphi新建一个工程,保存在该临时目录中,在此工程中加入axctrls.pas(用Project菜单下的Add to Project...), 在Component List中,打开TActiveXControl下的Protected节点,双击SetObjectRects,则看到下面的代码

function TActiveXControl.SetObjectRects(const rcPosRect: TRect;
  const rcClipRect: TRect): HResult;
var
  WinRect: TRect;
begin
  try
    IntersectRect(WinRect, rcPosRect, rcClipRect);
    FWinControl.BoundsRect := rcPosRect;
    Result := S_OK;
  except
    Result := HandleException;
  end;
end;

将FWinControl.BoundsRect := WinRect; 中的 WinRect 换成 rcPosRect, 然后运行工程编译,将axctrls.dcu 文件考到Borland\Delphi5\lib及Borland\Delphi5\lib\Debug下,将原有文件覆盖即可. 
我其初也有问题,现在解决了(按上面说的改一下就OK)
请问怎样调试ACTIVEFORM,应不是发布完再调试吧?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘