我需要动态将创建的控件绘制到位图。
但是它不起作用,它没有绘制任何东西。
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
但这仍然不够。
如果我对手动放置在表单上的控件执行相同的操作,则它正在工作,但动态创建的控件却不起作用。
如何做到这一点。该控件不应该在我只需要绘制它并释放它的任何地方可见。最佳答案
两个问题。首先,您确实需要为控件设置父级才能使其可绘制。
其次,您保存为 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;
关于delphi - 为动态创建的控件制作屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53299629/