Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Color/Marcado stringGrid (https://www.clubdelphi.com/foros/showthread.php?t=88479)

xdelph 11-06-2015 08:43:21

Color/Marcado stringGrid
 
Hola tengo una stringGrid y un botón de marcar. Al estar sobre esa fila seleccionada y darle al botón, esta fila debe cambiar a rojo. Alguna idea?

newtron 11-06-2015 09:19:49

Hola.

Si haces una búsqueda por "color stringgrid" te saldrán muchos hilos al respecto, uno que te puede servir es este.

Saludos

xdelph 11-06-2015 10:59:21

En todos veo el método DrawCell, pero lo que yo necesito es que al clickar el botón de marcar se marque la fila seleccionada

Casimiro Notevi 11-06-2015 11:00:41

Cita:

Empezado por xdelph (Mensaje 493163)
En todos veo el método DrawCell, pero lo que yo necesito es que al clickar el botón de marcar se marque la fila seleccionada

Exactamente, así es.

ecfisa 11-06-2015 19:46:08

Hola xdelph
Cita:

Empezado por xdelph (Mensaje 493163)
En todos veo el método DrawCell,...

Así es. Y no esperes encontrar algún método como DrawRow por que vas a perder tu tiempo... :)

Para que pintes una fila y permanezca pintada vas a tener que usar una columna adicional para indicar el estado de dicha columna (pintada o no).

Un ejemplo: (pinta de rojo cuando la columna tiene color blanco y viceversa)
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  c, f: Integer;
begin
  with StringGrid1 do
  begin
    for c := FixedCols to ColCount-1 do
      for f:= FixedRows to RowCount-1 do
        Cells[c,f] := IntToStr(c+f);
    ColCount := ColCount +1 ;    // columna adicional
    ColWidths[ColCount-1] := 0;  // ocultar columna adicional
    Options := Options + [goEditing];
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  CSELECTED : array[Boolean] of string = ('','x');
begin
  with StringGrid1 do
  begin
    Cells[ColCount-1, Row] := CSELECTED[Cells[ColCount-1, Row] = ''];
    Refresh;
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  CCOLORS: array[Boolean] of TColor = (clWindow, clRed);
begin
  with TStringGrid(Sender) do
  begin
    Canvas.Pen.Color   := clBlack;
    Canvas.Brush.Color := CCOLORS[Cells[ColCount-1, ARow] = 'x'];
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
  end;
end;
Salida:



Saludos :)


La franja horaria es GMT +2. Ahora son las 09:18:30.

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