Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como pintar una fila de un grid al hacer click diractamente (https://www.clubdelphi.com/foros/showthread.php?t=69177)

flystar 30-07-2010 22:15:46

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.

rgstuamigo 31-07-2010 00:15:14

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...:)

ecfisa 31-07-2010 22:58:13

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.


La franja horaria es GMT +2. Ahora son las 18:32:06.

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