【问题标题】:Delphi - How do i find out what a component is doing 'behind the scenes'Delphi - 我如何找出组件在“幕后”做什么
【发布时间】:2011-03-10 09:05:13
【问题描述】:

我正在尝试从一个通用组件 (TDateTimePicker) 编写一个新组件的后代。我的最终目标是对 TDateTimePicker 进行子类化,以便当用户输入组件时,将“SelText”设置为 DateTime 的特定部分。

目前,TDateTimePicker 的行为是在再次获得焦点时聚焦最后选择的文本。我首先想要实现的是找出(查看)当用户关注 TDateTimePicker 时实际执行的代码。

我可以看到 TDateTimePicker 是 TCommonCalender 的后代,而 TCommonCalender 又是 TWinControl 的后代。但是我尝试在 TWinControl 中的过程上放置一个断点并且无法到达它们(我猜这是正确的行为,因为很多组件都继承自 TWinControl)。

那么当用户输入 TDateTimePicker 时,我如何找出发生了什么?运行什么代码?都是隐藏的吗?我希望这可以阐明我需要做些什么来覆盖默认行为以实现我的目标。

【问题讨论】:

  • “无法联系到”是什么意思?断点不中断?您是否使用调试 dcu 构建了您的项目?您需要这样做才能进入 vcl 代码和/或在 vcl 中有断点实际中断。

标签: delphi custom-component


【解决方案1】:

TDateTimePicker 是 Windows 标准控件的包装器。 Delphi 包装器只是将消息发送到 Windows 控件,因此无需阅读太多 Delphi 代码。

您必须将 TDateTimePicker 视为“黑匣子”。无论那里发生什么,它都是您不应该关心的实现细节。事实上,日期时间选择器的实现细节已经改变,例如在 Windows 7 中!

【讨论】:

  • 所以你说这不可能?放在太硬的篮子里?
  • 不在“太难的篮子”中,在“你需要在微软”的篮子里。如果你在微软,可能没那么难!
【解决方案2】:

在项目|选项|编译器中检查“使用调试 DCU”并重建应用程序。根据 Delphi 版本,此复选框可以在不同的地方找到,这是针对 Delphi 2007 的。

【讨论】:

  • 谢谢解决了我的第一个问题,虽然对我帮助不大。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 2013-10-12
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2019-05-21
相关资源
最近更新 更多