Delphi 如何生成TScrollBox全部内容的图像?
我想生成TScrollBox全部内容的图像。就像截图一样。即使所有内容不在可见屏幕区域内。每个TControl子体都有一个Delphi 如何生成TScrollBox全部内容的图像?,delphi,Delphi,我想生成TScrollBox全部内容的图像。就像截图一样。即使所有内容不在可见屏幕区域内。每个TControl子体都有一个执行方法,您可以使用该方法使其执行时如同处理windows消息一样,因此这应该可以工作: var b:TBitmap; begin b:=Image1.Picture.Bitmap;//or b:=TBitmap.Create; b.Width:=ScrollBox1.HorzScrollBar.Range; b.Height:=ScrollBox1.Vert
执行方法,您可以使用该方法使其执行时如同处理windows消息一样,因此这应该可以工作:
var
b:TBitmap;
begin
b:=Image1.Picture.Bitmap;//or b:=TBitmap.Create;
b.Width:=ScrollBox1.HorzScrollBar.Range;
b.Height:=ScrollBox1.VertScrollBar.Range;
SetWindowOrgEx(b.Canvas.Handle,-ScrollBox1.HorzScrollBar.Position,-ScrollBox1.VertScrollBar.Position,nil);
ScrollBox1.Perform(WM_ERASEBKGND,b.Canvas.Handle,0);
ScrollBox1.Perform(WM_PAINT,b.Canvas.Handle,0);
由于Windows剪辑,滚动框的不可见区域没有绘制,因此无法获得此屏幕截图。如果我快速查看TWinControl.PaintTo
我会看到WM_ERASEBKGND
,我将在此处添加它,但也会看到设置剪辑的代码,这将阻止绘制滚动到视图之外的子控件。您已经非常接近了,但是窗口控件没有绘制到目标。也许你需要迭代所有基于窗口控件的子控件,并根据它们的Z顺序执行这两条消息。这不正是TWinControl.PaintControls
所做的吗?现在我尝试调用PaintControls
,结果与你的代码相同,没有窗口控件。不仅是控件,当我尝试这段代码时,它甚至没有在客户端矩形外绘制背景。从红色位图f.i.开始进行验证。