【问题标题】:What happened to Application.handle in Delphi XE?Delphi XE 中的 Application.handle 发生了什么?
【发布时间】:2011-02-22 20:54:55
【问题描述】:

我正在将一些代码移植到 Delphi XE,并注意到如果我使用 Application.Handle 来获取程序的句柄,Delphi 会抛出一个错误并拒绝编译,并说:

Undeclared identifier: 'Handle'

当我尝试调用 Application.ProcessMessages 时也会发生同样的行为。我认为一定是发生了一些没有在 Unicode 迁移指南中列出的转移。

“应用程序”的函数和变量去哪了?

【问题讨论】:

    标签: delphi migration delphi-xe delphi-6


    【解决方案1】:

    我的心理调试能力告诉我,这个单元在导入Forms 之后导入SvcMgr,因此SvcMgr 中的Application 变量将Forms 中您想要的变量超出范围。或者可能罪魁祸首是WebBrokerCtlPanel

    您可以通过 CTRL 在第一个错误点单击 Application 变量来确定它是什么,您将进入一个不是 Forms 的单元。

    解决方案只是重新排序您的导入,以便 Forms 排在其他位置之后。

    另一方面,我的精神调试能力今天可能会被打破!

    【讨论】:

    • 如果你搞砸了 uses 的顺序,让我想起 Windows.Bitmap 隐藏 Graphics.Bitmap
    • @CodeInChaos 太真实了。只是它真的是Windows.BITMAP 对你大喊大叫,“不要使用我!我错了!”。这是我觉得语言薄弱的一个领域。 Modula-2 的使用做得更好。
    • 大卫,你说得很对。问题不在于USES 子句,而在于我有一个'with WebBrowser1 do begin ... Application.handle ... end'。它正在使用来自 webbrowser 对象的“应用程序”。谢谢!
    • 如果 WITH 导致歧义,Embarcadero 可能会添加警告或提示(对人而言,显然不是对编译器而言)
    • @Gerry 为什么只是with?隐含的Self.、嵌套过程中的局部变量、uses 子句以及可能的许多其他情况都会出现模棱两可的作用域。也许我们真正需要的是命名空间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多