Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Pintar X fila en un TStringGrid (Delphi)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Pintar X fila en un TStringGrid (Delphi) Responder citando

Saludos a todos, creo este tema ya estaba en el foro pero no he podido dar solución a mi problema, lo que pasa es que quiero en un StringGrid pintar toda la fila de la celda q esté seleccionada, se que esto es en el método OnDrawCell del método, pero no he podido pintar la "fila seleccionada" en el momento q la selecciono, sino hasta despues de que la "desselecciono". Por si sirve, este es mi código:



procedure TForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
sTexto: String; // Texto que va a imprimir en la celda
iAnchoTexto: Integer; //Ancho del texto
begin
with StringGrid.Canvas do begin
if gdFixed in State then begin
Brush.Color := clNavy; // le ponemos azul de fondo
Font.Color := clWhite; // fuente blanca
Font.Style := [fsBold]; // y negrita
end
else begin
//if gdFocused in State then begin <--Con esto pinta solo la celda
if ARow= fila then begin <--Con esto "pinta" toda la fila
Brush.Color := clRed; // fondo rojo
Font.Color := clWhite; // fuente blanca
Font.Style := [fsBold]; // y negrita
end
else begin
Brush.Color := clWindow;
Font.Color := clBlack;
Font.Style := [];
end;
end;

//Pintamos las celdas
sTexto := StringGrid.Cells[ACol,ARow];
FillRect(Rect);
iAnchoTexto := TextWidth( sTexto );
//Texto centrado
TextOut( Rect.Left + ( ( Rect.Right - Rect.Left ) -
iAnchoTexto ) div 2, Rect.Top + 2, sTexto );

end;
end;


en la linea "if ARow = fila ...." la variable fila es (valga la redundancia) la fila q obtnego desde el método onClick del StringGrid.
Otro problema es de que la fila se queda pintada, y llega el momento en que todas las filas están pintadas, lo cual es incorrecto.

Gracias de antemano.
_________________
Q PESADEZ!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola num11:

Fíjate en la propiedad "Options" del TStringGrid, y pon a "True" el elemento "goRowSelect". Esto hará que siempre se seleccione la fila completa.

Y una vez hecho esto, si además necesitas cambiar el color de selección podrías usar algo así en el evento "OnDrawCell":
Código:
  with StringGrid.Canvas do begin
    if gdSelected in State then begin
      Brush.Color := clRed;
      Font.Color := clWhite;
      Font.Style := [fsBold];
      TextRect(Rect, Rect.Left+2, Rect.Top+2, StringGrid.Cells[ACol,ARow]);
    end;
  end;

(También podría serte útil: https://cppbuilder.es/viewtopic.php?t=10451)


PD: Este foro es sobre C++Builder, si necesitas uno sobre Delphi te será mas útil el siguiente: http://www.clubdelphi.com/foros
    
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola!! Muchas gracias por contestar, en efecto,esa propiedad ya la tenia habilitada pero no se porque no me pintaba la fila en el evento onDrawCell, pero ya hice todo de nuevo y ahora si la pinta XD, no se que tenía mal.

Por cierto, igual resolvi esto de otra manera: en el evento "onclic" del StringGrid obtengo en una variable global la fila que seleccione (esto igual para unos cálculos posteriores, asi que si ya la obtengo, pues la utilizo XD) y en el evento "OnDrawCell" del grid si el ARow (fila de la celda que está pintando) es igual a la "fila" que obtengo en el evento del clic, pues que pinte la celda de otro color.

No pongo el código porque deseguro se eliminará este tema, lo siento, no me di cuenta de que era de C++, pero muchisimas gracias por el enlace para el foro de Delphi. Hasta luego Smile.
_________________
Q PESADEZ!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.