Delphi 动态创建控件的MakeScreenshot
我需要动态地将创建的控件绘制到位图 但它不起作用,它什么也画不出来Delphi 动态创建控件的MakeScreenshot,delphi,firemonkey,delphi-10.2-tokyo,Delphi,Firemonkey,Delphi 10.2 Tokyo,我需要动态地将创建的控件绘制到位图 但它不起作用,它什么也画不出来 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; B
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;
我也直接尝试了painto
——但效果相同。我也尝试过设置家长
,但这仍然不够
如果我对手动放置在表单上的控件执行相同的操作,它正在工作,但不是动态创建的
如何做到这一点。此控件不应在任何我需要仅绘制和释放它的地方可见。两个问题。首先,您确实需要将控件设置为可绘制的父控件 第二,您正在保存为BMP,它不支持FMX中用于生成屏幕截图的透明度(而且是特定于平台的)。将其另存为PNG
procedure TForm1.FormCreate(Sender: TObject);
var
cb: TCheckBox;
BMP: TBitmap;
begin
BMP:= nil;
cb:= TCheckBox.Create(nil);
try
cb.Parent := self;
cb.Text := 'testing';
cb.IsChecked:= true;
bmp := cb.MakeScreenshot;
BMP.SaveToFile('C:\bmp.png');
finally
cb.Free;
BMP.Free;
end;
end;
我真的很感兴趣为什么有人投票反对这个问题?不清楚?这不表明我的努力吗?或者什么?您是否尝试过在复选框中添加家长?我的建议是,在制作屏幕截图之前,您的
TCheckBox
应该是可见的。我怀疑控件是否将其视觉外观存储在内部位图中,并准备按需交付。另外,在单独的try…中创建位图时,默认情况下创建新文件时,
@DimaTCheckBox
可见。BMP周围不需要额外的try/finally
,它被初始化为nil
,因此现有的Free
将在MakeScreenShot
中处理生成的对象,如果它被成功创建,但是try
中的后续调用失败。尽管有一些有趣的细节,如果省略文本
赋值,则整个cb图像完全为黑色。如果只指定一个空格或任何其他文本,它将按预期显示。是的,问题是text
。如果选中,则复选框根本不绘制。非常感谢。