【发布时间】:2014-02-22 15:30:38
【问题描述】:
我有一个自定义的TPanel 来处理WMNCHitTest。在运行时,当鼠标进入面板时,我得到以下 AV:
Project ClientDatasetEditor.exe 引发异常类 $C0000005,并带有消息“0x00405219 处的访问冲突:读取地址 Ox0000000c”
调用堆栈显示:
> :00405219 SysGetMem + $30 • :0040b7c6 @DynArraySetLength + $A • :005394e7 TWinControl.MainWndproc + $2F • :004c945a StdWndProc + 16 美元 • :76ff7694 user32.CaIINextt-iookEx + 0x97 • :76ff8baa; C:\WIND0WSysWOW64iser32.dII • :76ff8468; C:\WINDOWSysW0W64iser32.dII • :76ff9c40 user32.DispatchMessageW + Ox1O关注WMNCHitTest句柄:
procedure tExGraphicControl.WMNCHitTest(var Message: tWMNCHitTest);
begin
inherited;
if not (csDesigning in ComponentState) or
(msOver in fMouseStates ) then Exit;
if Message.Msg = WM_NCRButtonUp then begin
fMouseStates := [msLeftUp];
Exit ;
end;
if Message.Msg = WM_NCMBUTTONUP then begin
fMouseStates := [msLeftUp];
Exit ;
end;
if IsMouseOverControl (Self) then begin
fMouseStates := [msOver, msMove];
if Assigned (fOnMouseEvent) then
fOnMouseEvent (Self, fMouseStates);
end;
end;
知道是什么导致了 AV 吗?
【问题讨论】:
-
你真的包含了调用栈的上半部分吗?
-
@Sertac。是的,一切都在那里。
-
我注意到当我包含
inherited子句时,AV 被提升了。但如果我把它取下来,OnClick事件就会停止响应。 -
有趣的是它看起来不完整。我认为,您必须在继承上放置一个断点并对其进行跟踪。
标签: delphi delphi-xe3