一个非常奇怪的ActivForm的问题,高手们来指教,指教啊(200分)

应该是 IE 的臭虫,可以尝试更新 IE 到最新版本。
 
To : LukeWang
这篇文章,我也看到了,主要是针对 Win2000 WinXP,解决了 AxCtls.pas 文件的Bug,
我也试过了,但是,还是存在这个问题
 
Yo:wkp13_8
肯定不是 IE 的问题,更不是 IE 版本的问题,因为:
1. 微软的 MediaPlayer ActiveX 在任何IE 版本下(4、5、6)都没有出现过这种问题;
2. 而用 Delphi 开发的 ActiveX 控件却存在这个问题
 
我们也是用Delphi 开发ActiveForm
修改了AxCtls.pas后 没有再出现过这种DAX问题
 
DAX 异常现象非常少见,而且根本就没有规律,用 AxCtrls.pas 也不能解决问题,因为:
1. Delphi7 的 AxCtrls.pas 单元与 Delphi5 一样(ParkingWindow函数);如果存在这么一个已知的 Bug,为什么在 Delphi7 里面还不修正呢?
2. 打开 VCL 源程序就知道:SDAXError 是在 ComObj.pas 单元里产生的,是在函数 TComObjectFactory.CreateInstanceLic 内部产生的,这说明不是 AxCtrls.pas
的异常引起的;
 
DAX 异常现象非常多见,而且根本就是有规律,用 AxCtrls.pas 能解决问题,因为:
1. Delphi7 的 AxCtrls.pas 单元与 Delphi5 一样,都存在这个问题。都需要改正

2. 打开 VCL 源程序就知道:AxCtrls 使用了ComObj.pas单元
 
来自:andin, 时间:2003-8-25 23:02:00, ID:2133802
Yo:wkp13_8
肯定不是 IE 的问题,更不是 IE 版本的问题,因为:
1. 微软的 MediaPlayer ActiveX 在任何IE 版本下(4、5、6)都没有出现过这种问题;
2. 而用 Delphi 开发的 ActiveX 控件却存在这个问题


这种理解根本就是错误的,因为:
1。MediaPlayer ActiveX 不是拿delphi写的
2。Delphi开发的ActiveX控件与IE的版本有关系。
 
各位,我也饱受该问题的困扰!
我想知道如何修改AxCtrls.pas ?
 
没办法总要结贴吧,这样的回复。。。。。唉
 
好像有人贴过一个网址,说的解决办法,我把可能的解决办法(说可能因为我也不知道它是不是百分之一百有用)贴一下吧:
when using Internet Explorer in Wink2, WinXp, ActiveForm or ActiveX control raise

DAX error : access violation at address 000

reason :

delphi's ocx use same parking window procedure.

one ocx must use individual parking window proc.

fix error.

edit delphi VCL source routine in axctrls.pas

and compile axctrls.pas

copy axctrls.dcu to lib directory.

axctrls.pas

function ParkingWindow: HWND


var

TempClass: TWndClass


ParkingName : String


begin

Result := xParkingWindow


if Result <> 0 then Exit


// fix Dax error : accessviolation (win2k, win xp)

ParkingName := 'DAXParkingWindow_' + Format('%p', [@ParkingWindowProc])


FillChar(TempClass, sizeof(TempClass), 0)


if not GetClassInfo(HInstance, PChar(ParkingName), TempClass) then // fix Dax error : accessviolation (win2k, win xp)

begin

TempClass.hInstance := HInstance


TempClass.lpfnWndProc := @ParkingWindowProc


TempClass.lpszClassName := PChar(ParkingName)
// fix Dax error : accessviolation (win2k, win xp)

if Windows.RegisterClass(TempClass) = 0 then

raise EOutOfResources.Create(SWindowClass)


end


xParkingWindow := CreateWindowEx(WS_EX_TOOLWINDOW, TempClass.lpszClassName, nil,

WS_POPUP, GetSystemMetrics(SM_CXSCREEN) div 2,

GetSystemMetrics(SM_CYSCREEN) div 2, 0, 0, 0, 0, HInstance, nil)


SetWindowPos(xParkingWindow, 0, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW

or SWP_NOZORDER or SWP_SHOWWINDOW)


Result := xParkingWindow


end


我的dax问题,是千次里面会出现一次的,但也是问题啊,所以用了上述方法重新编译了一下,现在当然没出现问题,但我不能保证以后也不会出现,只能试试看了,死马当活马来医了,郁闷,如果大家有什么更好的办法也分享一下啊!
 
用上述方法,问题仍然没有解决,:(
大家有什么好方法啊?
 
顶部