【问题标题】:Panel and Controls on it get locked in a MDI in Delphi XE6 Why?Delphi XE6中的面板和控件被锁定在MDI中 为什么?
【发布时间】:2015-05-10 11:13:44
【问题描述】:

我有一个最初是在Delphi 2007中开发的软件。该软件有MDI界面,我在MDI父窗体中放置了很多控件,如面板、按钮、编辑控件等。

只是为了测试将其移植到较新版本的 Delphi(尤其是 Delphi XE6)的难易程度,我在 Delphi XE6 中打开了原始项目并给出了编译命令。

在编译时它没有给我一个错误,只是顺利编译。

但在运行编译后的可执行文件时,我观察到当我们在其中打开 MDI 子项时,所有控件(即按钮、编辑、备忘录等)都会被锁定,我们无法单击或编辑它们。

这是 Delphi 的 bug 还是与新编译器和 UNICODE 相关的问题?

请指导我如何解决这个问题。

【问题讨论】:

  • 先隔离解决问题。这将涉及一些调试,以及查看代码的能力。您不太可能会找到银弹。你需要在这个中加入一些移植物。
  • 你的意思是说默认的VCL框架有一些bug导致了这个问题吗?
  • 没有。我的意思是说你需要做一些调试来找出你的代码有什么问题。我的 MDI 应用程序很好。您的 MDI 应用有什么特别之处?
  • 我不认为 Embarcadero 会发布带有这样一个会导致广泛失败的错误的 Delphi。我们看不到您的代码以了解您的项目有什么不同。如果您创建一个非常简单的新 MDI 应用程序来测试它会发生什么?
  • @david - 你是否从 Delphi2007 转换了你的 MDI 应用程序?

标签: delphi controls delphi-xe6 locked


【解决方案1】:

经过一些测试,在DXE7中简单打开一个旧的MDI项目(用D7制作),编译运行,没有发现任何问题。放置在主窗体上的编辑控件、复选框和按钮在打开或不打开 MDI 子窗口的情况下正常反应。 要回答您的问题,

面板和控件在 Delphi XE6 中被锁定在 MDI 中,为什么?

可能是因为您的代码在打开子窗口时禁用了父窗口上的控件。然而,这纯属猜测,因为您没有提供进一步调查的方法。

这是 Delphi 的 bug 还是与新编译器和 UNICODE 相关的问题?

不,这不是 Delphi 中的错误。也没有任何证据表明这与新编译器或 Unicode 有关。

【讨论】:

  • 我没有调试我的代码,而是在 MDI Parent 中添加了两个新的 (T)Panel 控件。然后我在每个面板上放置了一些标准的 VCL 控件,例如 Edit、Memo、Button、Checkbox 等。如果我不打开任何 MDI 子程序,我现在运行该软件,一切都按预期工作。这意味着我可以在每个编辑和备忘录框中键入,选中取消选中复选框等。但是一旦我打开一个 MDI 子项,这些面板上的所有控件都会被锁定。即使在关闭 MDI 子项后,此行为仍然存在。您对此有何看法?
猜你喜欢
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2017-11-07
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多