Ver Mensaje Individual
  #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
Reputación: 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