PDA

Ver la Versión Completa : Color/Marcado stringGrid


xdelph
11-06-2015, 08:43:21
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 (http://www.clubdelphi.com/foros/showthread.php?t=76439&highlight=color+stringgrid).

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

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:

http://sia1.subirimagenes.net/img/2015/06/11/150611074137533713.gif

Saludos :)