动态创建控件的 MakeScreenshot
MakeScreenshot for dynamically created control
我需要动态地将创建的控件绘制到位图。
但是它不起作用,它不绘制任何东西。
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;
我需要动态地将创建的控件绘制到位图。
但是它不起作用,它不绘制任何东西。
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;