Hola,
Usando el paquete kgrid, y trabajando con el ejemplo, he conseguido hacer lo que me interesaba, que era combinar celdas y alinear un grid.
En el ejemplo le puse un boton para previsualizar la impresion.
Cree un procedimiento, como podeis ver, para poder ir agilizando lo que me interesaba poner en el grid y como queria ponerlo. quiza no es una manera elegante de hacerlo pero de momento funciona, quiza lo podria sustituir con arrays pero bueno ya veremos.
Con respecto a la previsualización, sigo buscando en las units relacionadas a ver si se pudiera escalar el grid y que no ocupara todo el ancho de la hoja porque no es lo que interesa. De todas formas si alguno ya averiguo este tema a ver si puede dar una ayudita.
Código Delphi
[-]unit Unit1;
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls, KGrids, KDialogs, KControls;
type
TForm1 = class(TForm)
Button1: TButton;
KGrid1: TKGrid;
KPrintSetupDialog1: TKPrintSetupDialog;
Panel2: TPanel;
ppdmain: TKPrintPreviewDialog;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
PROCEDURE COLUMNAS(TEXTO:STRING; ALINEA,COLUM, FILAS,CABECERA,COMBINAR:INTEGER);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
type
TMyTextCell = class(TKGridAttrTextCell)
private
FCheckBoxState: TCheckBoxState;
FNumber: Integer;
protected
procedure Initialize; override;
public
procedure Assign(Source: TKGridCell); override;
property CheckBoxState: TCheckBoxState read FCheckBoxState write FCheckBoxState;
property Number: Integer read FNumber write FNumber;
end;
procedure TMyTextCell.Assign(Source: TKGridCell);
begin
inherited;
if Source is TMyTextCell then
begin
FCheckBoxState := TMyTextCell(Source).CheckBoxState;
FNumber := TMyTextCell(Source).Number;
end;
end;
procedure TMyTextCell.Initialize;
begin
inherited;
FCheckBoxState := cbChecked;
FNumber := 0;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
panel1.Width:=330;
kgrid1.ColWidths[0]:=200;
kgrid1.ColWidths[1]:=100;
COLUMNAS('TITULO GRID',2,0,0,1,1);
COLUMNAS('FECHA',2,0,1,1,0);
COLUMNAS('TURNO',2,1,1,1,0);
COLUMNAS(DATETOSTR(DATE),2,0,2,0,0);
COLUMNAS('FILA1-1',2,1,2,0,0);
COLUMNAS('FILA2-0',2,0,3,0,0);
COLUMNAS('FILA2-1',2,1,3,0,0);
COLUMNAS('FILA3-0',2,0,4,0,0);
COLUMNAS('FILA3-1',2,1,4,0,0);
COLUMNAS ('* SECCION 2 *',2,0,5,1,1);
COLUMNAS('SUBSECCION 1',2,0,6,1,1);
COLUMNAS('FILA7',1,0,7,0,0);
COLUMNAS('FILA8',1,0,8,0,0);
COLUMNAS('FILA9',1,0,9,0,0);
COLUMNAS('SUBSECCION 2',2,0,10,1,1);
end;
PROCEDURE TFORM1.COLUMNAS( TEXTO: STRING;ALINEA,COLUM,FILAS,CABECERA,COMBINAR: INTEGER );
BEGIN
IF COMBINAR =1 THEN
kgrid1.cellspan[COLUM,FILAS]:=makecellspan(1-0+1,1);
with TMyTextCell(KGrid1.Cell[COLUM,FILAS]) do
begin
text:=TEXTO;
IF ALINEA = 1 THEN halign:=halign.halLeft;
IF ALINEA = 2 THEN HALIGN:=HALIGN.halCenter;
IF ALINEA = 3 THEN HALIGN:=HALIGN.halRight;
IF CABECERA =1 THEN
BEGIN
brush.style:=bssolid;
brush.color:=clsilver;
font.Style:=[fsbold];
end;
END;
END;
procedure TForm1.Button1Click(Sender: TObject);
begin
ppdmain.show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
KGrid1.CellClass := TMyTextCell;
end;
end.