Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir un stringGrid (https://www.clubdelphi.com/foros/showthread.php?t=95549)

kainchu3102 03-02-2022 14:02:13

Imprimir un stringGrid
 
buenas tardes gente, estaria necesitando ayuda sobre como puedo imprimir un stringgrid en un fast report, lei sobre algunos componentes el tfrxcrossobjet, pero nose como hacerlo, es para imprimir un presupuesto
armado del stringGrid es el siguiente
Código Delphi [-]
 StringGrid1.Cells[0,0] := 'CANT.';
  StringGrid1.Cells[1,0] := 'CODIGO';
  StringGrid1.Cells[2,0] := 'DESCRIPCION';
  StringGrid1.Cells[3,0] := 'TOTAL';

desde ya muchas gracias, estaria muy contento si por favor pudiera ayudarme. por favor

Neftali [Germán.Estévez] 03-02-2022 15:09:59

Así a primeras lo que se me ocurre para no usar componentes de terceros y que sea simple, es que vuelques el contenido del TStringGrid sobre un TClientDataset (qe debería poder hacerse con un simple bucle for/while) y que lluego uses el dataset contra el report.
De esa forma el Dataset (TClientDataset) ya te dará las líneas de detalle del presupuesto (en una banda).

kainchu3102 03-02-2022 18:38:22

No entendi. la verdad que me esta costando un poco si no sos mas especifico por favor.

Casimiro Notevi 03-02-2022 19:55:07

Quiere decir que como con fastreport tienes que usar un dataset, pues que pases los datos del stringgrid a un dataset, ejemplo un clientdataset, y ese dataset ya si puedes abrirlo desde el fastreport.
También puede que quieras usar un dbgrid en lugar del stringgrid y te ahorras el paso intermedio del clientdataset.

kainchu3102 03-02-2022 20:14:58

buscando encontre este codigo pero me sale un error lo cual ahora envio por imagen


Código Delphi [-]
unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    frxClass, StdCtrls, Grids, frxCross; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    StringGrid1: TStringGrid; 
    frxCrossObject1: TfrxCrossObject; 
    frxReport1: TfrxReport; 
    procedure Button1Click(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure frxReport1BeforePrint(c: TfrxReportComponent); 
    end; 

var 
    Form1: TForm1; 

implementation 
{$R *.DFM} 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    i, j: Integer; 
begin 
    for i := 1 to 16 do 
    for j := 1 to 2000 do 
     StringGrid1.Cells[i - 1, j - 1] := IntToStr(i * j); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    frxReport1.ShowReport; 
end; 

procedure TForm1.frxReport1BeforePrint(c: TfrxReportComponent); 
var 
    Cross: TfrxCrossView; 
    i, j: Integer; 
begin 
    if c is TfrxCrossView then 
    begin 
    Cross := TfrxCrossView(c); 
    for i := 1 to 16 do 
     for j := 1 to 2000 do 
     Cross.AddValue([i], [j], [StringGrid1.Cells[i - 1, j - 1]]); 
    end; 
end; 
end.

kainchu3102 03-02-2022 20:20:57


Casimiro Notevi 03-02-2022 21:00:31

No puedes encontrar la solución si no entiendes el problema.
Debes ir paso a paso, y no avanzar al siguiente hasta que entiendas el último.
Para empezar deberías poner tu código, y no cualquier código que hayas encontrado por ahí.

Neftali [Germán.Estévez] 04-02-2022 08:45:18

Si quieres usar el componente, revisa las demos que vienen con FastReport.
Dentro de la carpeta de demos, hay una llamada PrintStringList, que hace lo que necesitas y usa dicho componente.

En cuanto al error, lo más sencillo es que ejecutes el programa paso a paso y detectes en qué línea está fallando. Viendo sólo el código no se puede saber.
En alguna de las líneas estás accediendo a un objeto no creado, por eso te está dando un Access Violation.


La franja horaria es GMT +2. Ahora son las 12:59:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi