Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   combinar celdas en stringgrid (https://www.clubdelphi.com/foros/showthread.php?t=84631)

anubis 14-11-2013 21:39:01

combinar celdas en stringgrid
 
Buenas,

Estaba buscando otros componentes stringgrid para lazarus pero parece que no hay, y tambien ver si se pueden combinar celdas, algo parecido a excel, para, por lo menos, darle una salida a los datos.

Si he visto que decis en otro post que se podría jugar con ondrawcell pero me pierdo.

Si hubiera otra forma de hacer lo mismo que con excel en ese aspecto aunque fueran otros componentes os lo agradeceria.

saludos

rretamar 22-11-2013 13:09:34

Kgrid, viene preinstalado en Lazarus Codetyphon.




anubis 23-11-2013 08:14:58

Se agradece, es lo que andaba buscando ;).

anubis 25-11-2013 05:00:44

hola de nuevo,

rretamar, gracias por el aporte, ya lo implemente, pero me surgen un par de dudas, aprovechando que quiza el kgrid lo dominas ;).

si tengo un kgrid pequeño, a la hora de imprimir me ocupa toda la hoja, no he visto ninguna forma de poder encogerlo

y la otra duda es que he visto en el ejemplo que el contenido de las celdas se puede alinear a la derecha o centro, pero en los demos no he visto que se pueda a pesar de haber investigado en el codigo fuente.

Si he conseguido combinar celdas e incluso pintarlas...

Gracias

anubis 15-12-2013 19:43:19

Ya averigüe cómo se centra o se pone a la derecha y alguna cosa mas

ecfisa 15-12-2013 19:54:45

Cita:

Empezado por anubis (Mensaje 470798)
Ya averigüe cómo se centra o se pone a la derecha y alguna cosa mas

Hola anubis.

Estaríamos agradecidos si nos compartis el conocimiento ;)

Saludos :)

anubis 16-12-2013 16:14:00

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 }

  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
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

type
  { custom cell class - contains Checked property for column with check boxes
    and Number property for all cell strings with number beside the text }
  TMyTextCell = class(TKGridAttrTextCell)
  private
    FCheckBoxState: TCheckBoxState;
    FNumber: Integer;
  protected
    procedure Initialize; override;
  public
    procedure Assign(Source: TKGridCell); override;
    // we don't need to override other methods
    property CheckBoxState: TCheckBoxState read FCheckBoxState write FCheckBoxState;
    property Number: Integer read FNumber write FNumber;
  end;

{ TMyTextCell }

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;

{ TForm1 }

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.

ecfisa 16-12-2013 16:25:13

Muchas gracias anubis ^\||/

Saludos :)

anubis 22-01-2014 15:57:50

Hola,

Sigo sin poder escalar el grid a la hora de imprimir. cuando el grid tiene 2 columnas, usa todo el ancho de la hoja para imprimir.
Nose si alguno sabe si hay forma de escalar o si bien hay alguna otra alternativa para imprimir.

Saludos y gracias ;).


La franja horaria es GMT +2. Ahora son las 14:42:23.

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