Ver Mensaje Individual
  #2  
Antiguo 19-05-2020
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 21
gatosoft Va camino a la fama
¿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);
    { Private declarations }
  public
    { Public declarations }
  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(aCanvas.ClipRect.Right, aCanvas.ClipRect.Bottom);
      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.
Responder Con Cita