我需要动态绘制的控件绘制到位图。 但这行不通。它什么也没画
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
,但这仍然不够。
如果我对手动放置在表单上的控件执行相同的操作,则它正在工作,但无法动态创建。
如何执行此操作。我只需要绘画并释放它的任何地方都不应该看到此控件。
答案 0 :(得分:4)
两个问题。首先,您确实需要将控件作为父项以便可绘制。
第二,您将另存为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;