在Delphi中的画布上绘制一个不可见控件

3

我为 Delphi 做了一个日历组件。现在,我想在更改月份时添加视觉效果(类似于 Windows Vista 标准日历)。

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


@Andreas Rejbrand 我的问题是如何在 TBitmap 上绘制控件。 - Vahid
我猜你需要在两个月份之间实现“滚动”效果。第二个控件对此有何帮助? - NGLN
2
@Ngln,如果隐藏的控件是另一个日历控件,并且已经设置为下个月,则可以获取可见控件的图像并将其放在不可见控件的旁边。现在,在更改可见控件的当前月份以匹配隐藏控件的同时,对该图像在可见控件上进行动画处理。 - Rob Kennedy
1
@Rob 啊,我明白了。听起来很臃肿。 - NGLN
这正是我想要做的。 - Vahid
显示剩余3条评论
2个回答

5

调用控件的PaintTo方法。这适用于TWinControl的子类。

我没有看到TGraphicControl的后代有类似的方法,但由于这些控件总是需要一个TWinControl父级,您可以在父级控件上调用PaintTo以获取TGraphicControl子级的图像。


2
除了Rob的正确答案外,我可以提供两个替代方案:
  1. 箭头和月份名称似乎无法滚动,因此让它们成为组件的标题,并将其作为子控件。随后,将天数也作为子控件。现在可以将两个day-controls放置在所示的旁边。由于它们超出了组件的边界,这些旁边放置的day-controls被隐藏,但是一旦它们移动,就会变得可见。在滚动操作结束时,将最外层移到另一侧并适当设置其月份。

  2. 将天数的绘制移动到具有类似参数的月份的单独程序中。滚动时,调用该程序两次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接