Ver Mensaje Individual
  #5  
Antiguo 12-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Reputación: 17
rgstuamigo Va por buen camino
Arrow

Bueno entonces vamos a utilizar el evento OnDrawColumnCell del dbGrid y poner este codigo:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var i,x,u,y:Integer;
begin
x:=12;//inicializo en 12 por la anchura de la pequeña columna del indicador (Flecha)
y:=TAuxGrid(DBGrid1).DefaultRowHeight; //obtengo la altura de las filas
for  i:=0 to DataCol-1 do
   x:=x+DBGrid1.Columns[i].Width;//obtengo la anchura hasta la DataCol-1 columna

DBGrid1.Canvas.Pen.Color:=clBlack;//determino el color que va ser la linea
DBGrid1.Canvas.MoveTo(x,0);//pongo la punta del lapiz en la coordenada (x,0)
DBGrid1.Canvas.LineTo(x,y);//Dibujo una linea hasta la coordenada (x,y)
 if DataCol=DBGrid1.Columns.Count-1 then //verifico si es la ultima columna
   begin
    x:=10;//inicializo x en 10 por conveniencia
      for  i:=0 to DBGrid1.Columns.Count-1 do
           x:=x+DBGrid1.Columns[i].Width;  //obtengo la anchura de todas las columnas
    DBGrid1.Canvas.MoveTo(x,0);
    DBGrid1.Canvas.LineTo(x,y);// dibujo una linea al final de la ultima columna
   end;
end;
Ahora te preguntarás que es TAuxGrid el que esta con rojo, pues simplemente es una clase auxiliar que te permite hacer casting a una clase ancestra y poder acceder a los atributos y propiedades protegidas y demás(Buen truco por si acaso).Para usarla debes declarala en la sección de Type de delphi, algo así:
Código Delphi [-]
...
type
  TAuxGrid = class(TDBGrid);//<---
  TForm1 = class(TForm)
 .....
Y para que se repinten las lineas cuando por ejemplo minimizes o muevas tu formulario(anque quisas no sea necesario ) según si es el caso puedes llamar al método Invalidate de tu DbGrid en cuestión, yo lo he puesto en el evento OnPaint del formulario algo asi:
Código Delphi [-]
procedure TForm1.FormPaint(Sender: TObject);
begin
DBGrid1.Invalidate;
end;
.
Desde luego quisas pueda haber una mejor forma de hacerlo pero a mi se me ocurrió asi:.
Pruébalo...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 12-02-2010 a las 23:18:50.
Responder Con Cita