Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2010
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
Question Como pintar una fila de un grid al hacer click diractamente

Buenos Días:

Tengo algunos componentes GRID que muestran datos de una tabla pero quisiera pintar una fila en especial cuando sele le de click con el mouse, el asunto es que he visto en otros post que para hacer eso se debe actualizar un valor en la tabla de la base de datos y entonces en el evento donde se dibuja la tabla preguntar por dicho valor y si aquel es por ejemplo "verdadero" entonces en ese momento decir el color de la fila.

En mi caso como la BD esta en internet, primero tienen que hacer la consulta de modificacion, esperar y entonces pintara, lo cual hace que el pintado no sea "instantaneo", incluso se puede notar que sepuede tardar algo coniderable.

Estoy buscando otra forma de poderlo hacer, si alguno de ustudes tiene alguna sugerencia se lo voy a agradecer.

Gracias.
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #2  
Antiguo 31-07-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

Creo que tu problemas lo puedes resolver utilizando una "lista" donde guardes el número de fila ó en mi caso guardo el "ID" de la fila que se va dibujar de un color DETERMINADO al hacer click, ya que dicho ID es único en toda la tabla.
Bueno.. lo que debes hacer es utilizar el evento OnCellClick del DBGrid y adicionar la fila(en mi caso como ya he mencionado antes,añado el ID de la Fila que está en la primer columna del DBGrid) que tenemos actualmente seleccionada a nuestra "lista" mas o menos así:
Código Delphi [-]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var ID:String;
begin
     ID:=DBGrid1.Fields[0].AsString;//Obtengo el ID de la fila actual
    if lista.IndexOf(ID)=-1 then // si no lo tengo en mi lista
       lista.Add(ID);//lo agrego
end;
De esa manera cada ves que hagas click en alguna fila, pues se guardará en nuestra lista para que al repintar y/o dibujar las celdas del DBGrid aparescan con algun color que querramos. Para lograr ésto es necesario además hacer uso del evento OnDrawColumnCell del DBGrid y poner un código como éste:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

Var ID:String;
begin
   ID:=Column.Field.DataSet.Fields[0].AsString; //obtengo el campo ID de la fila actual
    if lista.IndexOf(ID)>-1 then// si dicho ID lo tengo en mi lista
     begin
     //Procedo a pintar la fila con el color deseado
     (Sender as TDBGrid).Canvas.Brush.Color:=clGreen;//aqui lo hago con el color de fondo
     (Sender as TDBGrid).Canvas.Font.Color:=clBlack;// aqui lo hago con el color de la fuente
     (Sender as TDBGrid).DefaultDrawColumnCell(Rect,DataCol,Column,State);//procedo al dibujado
     end;
end;
Por supuesto que no hay que olvidarse de crear(intanciar) a nuestra lista, que en éste caso uso un objeto TStringList , lo puedes hacer en el evento OnCreate del formualrio:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 Lista:=TStringList.Create;//Creo mi lista que contendrá la lista de Filas que se van a dibujar con un color determinado
end;
Tampoco hay que olvidarse de destruirlo, lo podemos hacer en el evento OnDestroy tambien del formulario:
Código Delphi [-]
procedure TForm1.FormDestroy(Sender: TObject);
begin
Lista.Free;
end;
Con eso creo que cada vez que hagas click el alguna fila(o celda) del DBGrid, ésta se pintará del color que quieras, en mi caso estoy usando un color verde (clGreen).
Espero te sea de utilidad...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 31-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola flystar.

Está como hacerlo con doble click en: http://www.clubdelphi.com/foros/showthread.php?t=65065
(te aviso por que el hilo fué iniciado por seb@ )

Con un sólo click es mucho más sencillo ya que sólo debes poner la propiedad
DbGrid.Options.dgRowSelected a True y esto en OnDrawColumnCell del DBGrid:

Código:
procedure TForm1.DBGRubDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if  gdSelected in State then
   with DBGrid1 do
   begin
     Canvas.brush.Color:= clBlue;
     Canvas.Font.Color:= clWhite;
     DefaultDrawColumnCell(Rect, DataCol, Column, State);
   end;
end;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 31-07-2010 a las 23:08:26.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como cambiar el color de una fila del Grid de ibobjects kovaski Firebird e Interbase 8 14-10-2006 16:36:06
Como pintar la fila de un DBGrid Gustavo Gowdak OOP 2 04-05-2006 21:34:04
Pintar Fila del DBGrid Palmiro Conexión con bases de datos 2 05-04-2006 23:25:51
Como Borra exclusivamente una fila en un String Grid mgaray Varios 1 14-03-2005 22:06:57
Pintar Fila por medio en ub DBGrid josem OOP 3 01-01-2005 20:54:52


La franja horaria es GMT +2. Ahora son las 16:53:25.


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