【问题标题】:How to avoid System Exception when Runtime Themes are enabled?启用运行时主题时如何避免系统异常?
【发布时间】:2012-10-03 14:00:33
【问题描述】:

我刚刚在项目选项中遇到了一些有趣的启用运行时主题,当 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 中都会出现同样的问题。

如果我在项目选项中禁用运行时主题,也不例外,但它会显示“旧式 XP 提示”。

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

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

操作系统:Windows 7 x64

Delphi:2007 年,安装了 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,因此“引发了系统异常......它仍然没有解释为什么只有在“启用运行时主题”时才解释

我现在没有时间进一步调查,但是找到了“触发器”,需要弄清楚“谁”在拉它。

【问题讨论】:

    标签: delphi delphi-2007


    【解决方案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”中。

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 2019-09-19
      • 2012-08-22
      • 2017-01-21
      • 2012-08-30
      • 1970-01-01
      • 2023-03-11
      • 2020-09-28
      • 2016-06-03
      相关资源
      最近更新 更多