【发布时间】:2018-11-14 11:52:10
【问题描述】:
我需要动态地将创建的控件绘制到位图。
但它不起作用,它不绘制任何东西。
procedure TForm2.Button1Click(Sender: TObject);
var
cb: TCheckBox;
BMP: TBitmap;
begin
BMP:= nil;
cb:= TCheckBox.Create(nil);
try
cb.IsChecked:= true;
cb.Repaint;
BMP:= cb.MakeScreenshot;
BMP.SaveToFile('C:\bmp.bmp');
finally
FreeAndNil(cb);
FreeAndNil(BMP);
end;
end;
我也直接尝试过PaintTo - 但效果相同。我也试过设置parent,但这还不够。
如果我对在表单上手动放置的控件执行相同操作,但不是动态创建的。
如何做到这一点。这个控件不应该在我只需要绘制它并释放它的任何地方可见。
【问题讨论】:
-
我真的很感兴趣为什么有人投票反对这个问题?不清楚?这不显示我的努力吗?还是什么?
-
您是否尝试在复选框中添加父级?
-
我的建议是您的
TCheckBox在截屏之前应该是可见的。我怀疑控件是否将其视觉外观存储在内部位图上,并准备好按需交付。并将位图创建在单独的try...finally中。 -
@Dima
TCheckBox在新建时默认可见。不需要在 BMP 周围添加额外的try/finally- 它被初始化为nil,因此现有的Free将处理MakeScreenShot中生成的对象,如果它成功创建但随后在try中调用失败。
标签: delphi firemonkey delphi-10.2-tokyo