启用运行时主题时如何避免系统异常?

时间:2012-10-12 17:41:02

标签: delphi delphi-2007

我刚刚在Project Options中运行了一些有趣的启用运行时主题,当一个提示显示在TDCTree上时(来自旧的Dream组件,类似于TTreeView),鼠标移动到另一个应该显示提示的节点上,我得到的是:

---------------------------
Debugger Fault Notification
---------------------------
Project DRIVE:\path\to\project\MyApp.exe faulted with message: 'system exception (code 0xc000041d) at 0x73c84cad'. Process Stopped. Use Step or Run to continue.
---------------------------
OK   
---------------------------

我相信IDE中会出现同样的问题,每当我在设计时添加项目时尝试将鼠标悬停在项目上。

如果我在Project Options中禁用运行时主题,没有例外,但它显示“旧式XP提示”。

应用程序本身会引发事件名称“APPCRASH”的异常。

看到很多与“运行时主题”相关的问题,但没有看到任何方法可以避免这些问题而不会禁用它们。

操作系统:Windows 7 x64

Delphi:2007年12月和2008年2月安装更新

更新1:

避免此问题的一种方法是:

Procedure TDCTreeToolTip.DoHideToolTip;
Begin
  Inherited;
  If FToolTipAdded Then
    if FTreeNode <> NIL then // fix
      DeleteToolTip(ToolTipID,FTreeNode.TreeView.Handle);
  FToolTipAdded:=False;
  FTreeNode:=Nil;
End;

以单位“dcntree.pas”。

似乎FTreeNode“以某种方式”在调用DoHideToolTip之前获得了NIL-ed,因此“系统异常被提出......它仍然无法解释为什么只有”运行时主题被启用“

我现在没有时间对此进行进一步调查,但发现了“触发器”,需要弄清楚“谁”正在拉动它。

1 个答案:

答案 0 :(得分:0)

似乎至少目前只能使用以下解决方法:

Procedure TDCTreeToolTip.DoHideToolTip;
Begin
  Inherited;
  If FToolTipAdded Then
    if FTreeNode <> NIL then // fix
      DeleteToolTip(ToolTipID,FTreeNode.TreeView.Handle);
  FToolTipAdded:=False;
  FTreeNode:=Nil;
End;

以单位“dcntree.pas”。