MakeScreenshot для динамически создаваемого элемента управления - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно динамически отрисовать созданный элемент управления в растровое изображение.

Но это не работает, ничего не рисует.

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, но этого по-прежнему недостаточно.

Если я делаю то же самое для элемента управления, помещенного от руки в форму, он работает, но не создается динамически.

Каксделай это.Этот элемент управления не должен быть виден где-либо, мне нужно только нарисовать его и освободить.

1 Ответ

0 голосов
/ 14 ноября 2018

Два вопроса.Во-первых, вам нужен родительский элемент управления, чтобы его можно было рисовать.

Во-вторых, вы сохраняете как 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;
...