Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   cambiar color StringGrid, toda una fila, despues de la primera. (https://www.clubdelphi.com/foros/showthread.php?t=27631)

sakuragi 25-11-2005 21:13:27

cambiar color StringGrid, toda una fila, despues de la primera.
 
hola que tal

eh estado viendo en el foro. sobre como cambiar el color de uan fila en un stringgrid

pero asta orita nomas eh visto cambiar el color de una celda. no de toda una fila o renglon.

una de estas forma es este:
Código Delphi [-]
 Procedure TForm1.Grid1DrawCell(Sender: TObject; ACol, ARow: 
  Longint; Rect: TRect; State: TGridDrawState);

Begin
  with Sender as TDrawGrid do
  begin
    if (aCol = 3) and (FSeleccionada) then  
    Begin
      // solamente tomaremos acción cuando sea la columna 3
      // FSeleccionada es un miembro privado booleano de la clase que 
      // indica si la celda de la la columna debe pintarse de un color o de otro
      Canvas.Brush.Color := clBlue;
      Canvas.Font.Color := clWhite;
    end
    else Begin
      Canvas.Brush.Color := clBackGround;
      Canvas.Font.Color := clBlack;
    end;
    Canvas.FillRect(Rect);
    Canvas.TextRect(Rect, 0, 0, (Sender as TStringGrid).Cells[ACol, ARow]);
    if gdFocused in State then
      Canvas.DrawFocusRect(Rect);
    end;
  end;
end;

Héctor Randolph 25-11-2005 22:20:22

¿Y cuál era tú duda? :confused: :confused:

Acaso es ¿Cómo cambiar el color de toda una fila en un StringGrid?

Simple en el código que publicaste sólo modifica el condicional

Código Delphi [-]
  if ACol=3 then

por

Código Delphi [-]
  if ARow=x then

Saludos

jachguate 25-11-2005 23:45:26

Hola.

El código publicado lo dejé yo hace tiempo en este hilo.

Creo que al introducir una pregunta en dicho hilo, debiste haber aclarado cual era tu objetivo allá mismo, y no abrir un nuevo hilo. Luego, me parece que lo normal sería colocar al menos una referencia a donde habías obtenido el código, ¿no te parece?

Saludos.

sakuragi 26-11-2005 05:58:24

bueno gracias por contestar.

bueno creo lo que tengo es un problema espesifico.


eh tratado de modificar las condiciones para poder que me arroje el resultado que deseo que es.


digamos tengo el StringGrid con los campos

nombre | direccion | cantidad | sucursal
tecate calle 3 matriz
tecate otracalle 1 sucursal1
tecate calle 1 sucursal2
tecate calle 1 sucursal3


entonses digamos que lleno el primer campo nombre (nombre de la empresa)
direccion(calle cuaquiere), cantidad(de cuantas sucursales va tener), sucursal(Nombre de la sucursal).

entonses cuando de "enter" el la primera linea me arroja el resultado de las otra 3 sucursales, esto hace referencia a las cantidad = 3.

entonses yo quiero poder pintar diferente, del renglon principal, alos renglones hijos, pintandolos de color diferente, al renglon principal,

no eh podido hayar la condicion para dividir cuando pintar el colo diferente, dependiendo de la "cantidad" del renglon principal.


gracias espero haver sido mas claro

saludos

Héctor Randolph 26-11-2005 07:28:30

Hola sakuragi.

Me he permitido modificar el código que publicó Juan Antonio para adaptarlo a tu pregunta.

Las modificaciones que hice son para consultar el contenido de una columna en específico y pintar el renglón actual dependiendo de una condición.

En este ejemplo consulto el contenido de la columna 3 y si el contenido es par, entonces pinto todo el renglón de azul.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  I:Integer;
begin
  // Llena el grid con algunos números
  StringGrid1.RowCount:=6;
  StringGrid1.ColCount:=6;
  for I:=1 to 5 do
    StringGrid1.Cells[3,I]:=IntToStr(I);
  StringGrid1.Invalidate;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S:String;
  Col3: Integer;
begin
    Col3:=-1;
    S:=(Sender as TStringGrid).Cells[3, ARow];
    if S<>'' then Col3:=StrToInt(S);
    with Sender as TStringGrid do
    begin
      if (ACol < FixedCols) or (ARow < FixedRows) then //Es una celda fija?
        Canvas.Brush.Color := FixedColor
      else
      if ( Col3 mod 2 =0) then // El contenido de la columna 3 es par?
      Begin
        Canvas.Brush.Color := clBlue;
        Canvas.Font.Color := clSilver;
      end
      else Begin
        Canvas.Brush.Color := Color;
        Canvas.Font:= Font;
      end;
      Canvas.FillRect(Rect);
      Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, (Sender as TStringGrid).Cells[ACol, ARow]);
      if gdFocused in State then Canvas.DrawFocusRect(Rect);
    end;
end;

Sólo falta adaptarlo para tu caso en particular.

Saludos

sakuragi 28-11-2005 19:20:33

gracias

lo probare


saludos


La franja horaria es GMT +2. Ahora son las 03:40:09.

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