Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2010
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 20
Angel Fernández Va por buen camino
¿Se pueden quitar las líneas verticales en un dbgrid pero dejar las de las cabeceras?

Hola a todos.

Estoy tratando de obtener un dbgrid (o jvdbgrid que viene a ser lo mismo pero un poco avanzado) sin líneas verticales para darle un aspecto más elegante (según mi criterio).
Esto es fácil: En options -> dgcollines -> poner false y listo. Pero se pierden también las líneas verticales de las cabeceras y considero que queda mejor con estas líneas, para definir bien las columnas, que sin ellas.

Esto que digo (líneas verticales sólo en la cabecera) lo hacen otros componentes de terceros previo paso por caja (tmsgrid, expressgrid, etc.) pero el componente jvdbgrid es muy válido.

¿Se puede hacer lo que digo, por ejemplo usando el DefaultDrawColumnCell(Rect, DataCol, Column, State)? (Esta sugerencia me la saco un poco de la manga)

Un saludo al foro.
Responder Con Cita
  #2  
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
Poder: 17
rgstuamigo Va por buen camino
Arrow

Revisa dentro de la propiedad Options de tu DBGrid y ubica la opcion que dice dgColLines que es para las lineas de columnas y dgRowLines para las lineas de Filas. .. No sé si es lo que buscas ...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 12-02-2010
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 20
Angel Fernández Va por buen camino
Gracias por tu respuesta. Sin embargo, eso es lo que decía en mi mensaje original, que tocando en opciones -> dgcollines -> false te quita las líneas verticales pero también te quita las líneas de las cabeceras (donde aparecen los nombres de los campos) y lo que busco es que no me quite las de las cabeceras.

Un saludo.
Responder Con Cita
  #4  
Antiguo 12-02-2010
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
si te fijas con un StringGrid si que se puede pero con un Dbgrid no,
quizas puedas mirar el codigo fuente (.pas) del componente StringGrid e intentar copiar esa propiedad en el Dbgrid
aunque no sera facil, pero quizas tengas suerte y lo sea.
Responder Con Cita
  #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
Poder: 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
  #6  
Antiguo 12-02-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Angel Fernández, puedes hacer también un Cast a StringGrid y añadir la opción goFixedVertLine.

Código Delphi [-]
 TStringGrid(DBGrid1).Options := TStringGrid(DBGrid1).Options + [goFixedVertLine];

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
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
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por Caro Ver Mensaje
Hola Angel Fernández, puedes hacer también un Cast a StringGrid y añadir la opción goFixedVertLine.

Código Delphi [-] TStringGrid(DBGrid1).Options := TStringGrid(DBGrid1).Options + [goFixedVertLine];


Saluditos
Definitivamente creo que la opcion que brinda Caro es la mejor.., amigo Angel Fernández olvídate de mi anterior código chapuza y hazlo como indica Caro..
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #8  
Antiguo 13-02-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por rgstuamigo Ver Mensaje
Definitivamente creo que la opcion que brinda Caro es la mejor.., amigo Angel Fernández olvídate de mi anterior código chapuza y hazlo como indica Caro..
Chapuza sería lo que estaba pensando yo: agregar un segundo DBGrid sobrepuesto, con la altura exacta de la cabecera.

Un afectuoso saludo hasta Cochabamba y Santa Cruz.

Al.
Responder Con Cita
  #9  
Antiguo 13-02-2010
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 20
Angel Fernández Va por buen camino
Caramba, amigos, muchas gracias por vuestras respuestas. Probaré lo de Caro a ver qué tal.
Y cuidado con lo que dice Al que no lo descarto...

Un saludo.
Responder Con Cita
  #10  
Antiguo 13-02-2010
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 20
Angel Fernández Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Hola Angel Fernández, puedes hacer también un Cast a StringGrid y añadir la opción goFixedVertLine.

Código Delphi [-] TStringGrid(DBGrid1).Options := TStringGrid(DBGrid1).Options + [goFixedVertLine];


Saluditos
Funciona perfectamente. Muchas gracias Caro. Y también muchas gracias para Rgstuamigo por tu código.

Un saludo.
Responder Con Cita
  #11  
Antiguo 15-02-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Pq no usar El DBGrid sin la fila de titulos y en su lugar poner un control THeader y asi lo personalizas a tu gusto..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Se puede dejar fija o bloquear la fila seleccionada en un dbgrid? Angel Fernández Varios 6 23-07-2011 04:35:31
Se pueden poner Radiobuttons en un DBGrid? JoAnCa Varios 2 23-02-2009 22:52:22
Dejar de visualizar un registro de un DBGrid... eddg Varios 23 06-10-2007 01:39:46
No Dejar borrar en un DBGrid Gangster Conexión con bases de datos 2 28-06-2007 13:43:14
imprimir lineas verticales en el cuerpo de un reporte Choclito Impresión 3 08-01-2007 22:22:38


La franja horaria es GMT +2. Ahora son las 23:17:24.


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
Copyright 1996-2007 Club Delphi