Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid como casillas excel (https://www.clubdelphi.com/foros/showthread.php?t=91978)

petercat 16-06-2017 23:37:09

DBGrid como casillas excel
 
1 Archivos Adjunto(s)
Hola Estoy con un DBGrid y estoy intentando dibujar un borde a una cantidad de casillas determinadas como se hace en excel con la propiedad borde donde selecciono las casillas que quiero encuadrar con ese borde. Ahora mismo con RowLine pones las lineas en horizontal a todo el grid lo que estoy intendando es que dependiendo del dato que indique me recuadre parte de algunas lineas o casilla con un recuadro.

Algo parecido al imagen que adjunto.

Gracias

mallenat 19-06-2017 12:49:28

Con el componente DBGRid es bastante complejo realizar, puesto que deberías gestionar tu el dibujado de los bordes. Te recomiendo usar algun componente que ya te permita hacerlo. Te dejo un enlace a un TAdvStringGrid de TMS Software: tmssoftware.com/site/asg43.asp

petercat 24-06-2017 00:04:00

Gracias mallet, pero el componente TAdvStringGridveo que es de pago y ya me he hecho yo mi procedure para que me funcionelo pongo aqui por si a alguien le hace falta.
Cuento las lineas de grid que tengo [T], [i] es otro integer que yo utilizo un numero determinado, y [H] es una division que utilizo para pintar la linea por debajo.
Realmente lo que conseguimos es pintar todo el cuado del grid en color ClBlack y lo reducimos por arriba utilizando (MyRect.Bottom := MyRect.Top + 3;)y por abajo (MyRect.Top := MyRect.Bottom - 3) las variables T,I,H son donde quiero hacer el recuadro, tambien los podemos ace en el ColLines con (Column.Index) donde 1 puede ser una variable mas.

Código Delphi [-]
type
  MyTDBGrid = class(TDBGrid);

procedure TFTecladoDetalle.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  MyCanvas: TCanvas;
  MyColor: TColor;
  MyRect: TRect;
  T, i,h :Integer;

begin
T := DBGrid1.DataSource.DataSet.RecordCount;
I :=4;
H := T div I;


  if Column.Index mod 1 = 0 then begin
    MyCanvas := DBGrid1.Canvas;
    MyColor :=  DBGrid1.Canvas.Brush.Color;
    DBGrid1.Canvas.Brush.Color := clblack;//DBGrid1.Color;
    MyRect := Rect;
//    Inc(MyRect.Right); // QUITO EL COLLINES EN EL GRID Y COMENTO ESTO
    MyRect.Left := MyRect.Right - 3;  //GROSOR DE LA LINEA
    MyCanvas.FillRect(MyRect);
    if MyTDBGrid(DBGrid1).DataLink.ActiveRecord mod H = 0 then begin

      MyRect := Rect;
//      Inc(MyRect.Bottom); // QUITO EL ROWLINES EN EL GRID Y COMENTO ESTO
      MyRect.Bottom := MyRect.Top + 3;  //GROSOR DE LA LINEA
      MyCanvas.FillRect(MyRect);
    end;
    if MyTDBGrid(DBGrid1).DataLink.ActiveRecord mod T = T-1 then begin
      MyRect := Rect;
//      Inc(MyRect.Bottom); // QUITO EL ROWLINES EN EL GRID Y COMENTO ESTO
      MyRect.Top := MyRect.Bottom - 3;  //GROSOR DE LA LINEA
      MyCanvas.FillRect(MyRect);
    end;
    DBGrid1.Canvas.Brush.Color := MyColor;
  end;


end;


La franja horaria es GMT +2. Ahora son las 02:47:35.

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