【问题标题】:Draw an invisible control on a canvas in Delphi在 Delphi 的画布上绘制一个不可见的控件
【发布时间】:2012-09-25 14:02:08
【问题描述】:

我为 Delphi 制作了一个日历组件。现在我想在更改月份时为其添加视觉效果(如 Windows Vista 标准日历)。

现在我想创建一个不可见的组件副本并将其绘制在画布上以用于视觉效果。我尝试了BitBlt 函数,但它不起作用,因为控件是不可见的。有没有办法在画布上绘制不可见的控件?

【问题讨论】:

  • @Andreas Rejbrand 我的问题是如何在 TBitmap 上绘制控件。
  • 我假设您需要两个月之间的“滚动”效果。第二个控件对此有何帮助?
  • @Ngln,如果隐藏控件是另一个日历控件,并且已经设置为下个月,那么你可以获取可见控件的图像并将其放在不可见控件的图像旁边.现在,当您更改可见控件的当前月份以匹配隐藏的月份时,在可见控件上为该图像设置动画。
  • @Rob 啊,我明白了。不过听起来很胖。
  • 这正是我想做的。

标签: delphi draw invisible


【解决方案1】:

调用控件的PaintTo 方法。这是给TWinControl的后代的。

我没有看到TGraphicControl 后代的类似方法,但由于它们总是需要TWinControl 父级,因此您只需在父控件上调用PaintTo 即可获取TGraphicControl 子级的图像。

【讨论】:

    【解决方案2】:

    除了 Rob 的 correct answer,我可以提供两个替代方案吗?

    1. 箭头和月份名称似乎没有滚动,所以我们称它们为组件的标题,并使其成为组件的子控件。随后,也将日子设为子控件。现在可以在显示的旁边放置两个 day-controls。因为它们超出了组件的范围,所以这些放在一边的日间控件是隐藏的,但一旦它们移动就会变得可见。在滚动操作结束时,将最外层移到另一侧并适当设置其月份。

    2. 将日期的绘制移动到带有月份参数的单独例程中。滚动时,调用该例程两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2019-10-14
      相关资源
      最近更新 更多