Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 动态创建控件的MakeScreenshot_Delphi_Firemonkey_Delphi 10.2 Tokyo - Fatal编程技术网

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…中创建位图时,默认情况下创建新文件时,
@Dima
TCheckBox
可见。BMP周围不需要额外的
try/finally
,它被初始化为
nil
,因此现有的
Free
将在
MakeScreenShot
中处理生成的对象,如果它被成功创建,但是
try
中的后续调用失败。尽管有一些有趣的细节,如果省略
文本
赋值,则整个cb图像完全为黑色。如果只指定一个空格或任何其他文本,它将按预期显示。是的,问题是
text
。如果选中,则复选框根本不绘制。非常感谢。