¿Y quieres generar directamente el PowerPoint o solo generar los prints?
Si es lo segundo, tal vez este codigo te de una idea, para aplicarlo a lo que necesitas. el codigo guarda un canvas en un archivo PNG.
Pones un boton y un stringGrid (no es necesario llenar datos) y ejecutas el click. Miralo y si te sirve lo adaptas,
Código Delphi
[-]
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;
type
TForm1 = class(TForm)
Button1: TButton;
SaveDialog1: TSaveDialog;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private
procedure PrintCanvas(aCanvas: TCanvas; aRect: TRect);
public
end;
var
Form1: TForm1;
implementation
Uses Vcl.Imaging.pngimage;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var vRect: TRect;
vAncho, vAlto: Integer;
begin
vAncho:= (StringGrid1.ColCount+1) * StringGrid1.DefaultColWidth;
if vAncho > StringGrid1.Width then
vAncho:= StringGrid1.Width;
vAlto:= (StringGrid1.RowCount+1) * StringGrid1.DefaultRowHeight;
if vAlto > StringGrid1.Height then
vAlto:= StringGrid1.Height;
vRect.Top:=0;
vRect.Left:=0;
vRect.Right:=vAncho;
vRect.Bottom:=vAlto;
PrintCanvas(StringGrid1.Canvas, vRect);
end;
procedure TForm1.PrintCanvas(aCanvas: TCanvas; aRect: TRect);
var Bmp: TBitmap;
Png: TPngImage;
begin
if SaveDialog1.Execute then
begin
Bmp := TBitmap.Create;
try
Bmp.SetSize(aRect.Right, aRect.Bottom);
BitBlt(Bmp.Canvas.Handle, aRect.Top, aRect.Left, aRect.Right, aRect.Bottom, aCanvas.Handle, 0, 0, SRCCOPY);
Png := TPngImage.Create;
try
Png.Assign(Bmp);
Png.SaveToFile(SaveDialog1.FileName);
finally
Png.Free;
end;
finally
Bmp.Free;
end;
end;
end;
end.