在释放MetaFileCanvas之前,MetaFile不会自行更新。(你发布的代码实际上显示了这一点,但
Free
已被删除。)
Embarcadero的例子在另一个意义上也是错误的。应在
OnPaint
事件,而不是来自其他任何地方。(我将此归咎于用户提供的大部分文档示例代码,并且它只由文档团队而不是开发团队AFAICT进行审查。)
procedure TForm1.FormPaint(Sender: TObject);
var
MetaFile: TMetafile;
MFCanvas: TMetafileCanvas;
begin
MetaFile := TMetafile.Create;
try
MetaFile.SetSize(200, 200);
try
MFCanvas := TMetafileCanvas.Create(MetaFile, Canvas.Handle);
MFCanvas.Brush.Color := clRed;
MFCanvas.FloodFill(0, 0, clRed, fsBorder);
MFCanvas.Rectangle(10, 10, 190, 190);
finally
MFCanvas.Free;
end;
Self.Canvas.StretchDraw(Rect(0, 0, 200, 200), MetaFile);
finally
MetaFile.Free;
end;
end;