【问题标题】:In Delphi 7, get a bitmap from a form when the form is higher than the screen在Delphi 7中,当窗体高于屏幕时从窗体中获取位图
【发布时间】:2026-01-16 00:35:01
【问题描述】:

我有一个高于屏幕的表格,当我尝试用

模拟 printscreen 键时
keybd_event(VK_SNAPSHOT, 1, 0, 0);

当然,表单会被裁剪。 所以我尝试在活动表单上执行以下操作:

Clipboard.Assign(GetFormImage);

但是,即使在这种情况下,位图也会被裁剪。

这里有一个旧的 Delphi 组件 BDPrint:

http://www.efg2.com/Lab/Library/Delphi/Printing/

但它不再可用,它能够打印一个创建临时 tImage 然后打印它的表单,甚至是屏幕外部分,但我不再有它的源代码了。

如何生成活动表单的位图以及屏幕外部分,并将其存储在剪贴板中?谢谢

【问题讨论】:

    标签: delphi bitmap clipboard


    【解决方案1】:

    如果我有时间,我可以在脑海中搜索更多内容:

    【讨论】:

    • 谢谢你。我对内部 Windows 数据结构不太熟悉,但现在是我深入研究它们的时候了 :) 我一试就会告诉你
    【解决方案2】:

    您不需要涉及剪贴板,也不需要捕获屏幕。尝试将表单的Handle 属性传递给PrintWindow(),或直接向表单发送WM_PRINT 消息。任何一个都可以让您指定一个HDC(例如来自TBitmap.Canvas.Handle 属性的那个),以便窗口自行绘制。

    【讨论】:

    • 是否可以通过一个简短的 Delphi 示例来更新您的答案,该示例说明如何使用 PrintWindow() 或如何发送 WM_PRINT 消息。谢谢。