Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Colorear StringGrid al hacer click (https://www.clubdelphi.com/foros/showthread.php?t=76843)

rruffino 30-11-2011 15:58:10

Colorear StringGrid al hacer click
 
Hola gente, tengo un stringgrid que lo cargo con información en tiempo de ejecución. Lo que necesito hacer es que ni bien se termine de cargar los datos, todas las filas tengan un único color y que al clickear en una fila se pinte de color (por ejemplo verde) toda la fila, y al volverla a clickear vuelva al color original. Esto lo necesito para identificar cuales filas he seleccionado para un posterior tratamiento.
Otra forma que me serviría es poniendo un checkbox dentro del stringgrid, pero he leído en el foro y no me ha salido. Aguardo cualquier sugerencia. Gracias!!!:D

Neftali [Germán.Estévez] 30-11-2011 16:45:30

OPCIÓN 1:
Crear una columna oculta en el StriungGrid (Columm Width = 0) de forma que almacene 0 o 1; El valor de esa columna es el que te sirve para pintar diferente. Hace la función del Checkbox que quieres añadir. Cada vez que pulsas en una fila cambias el valor de esa columna.

El pintado de un color u otro irá en relación a ese valor.

OPCIÓN 2:

Yo utilizaría una estructura anexa (por ejemplo un TList o TStrinsList -mejor este ordenado-) para guardar las filas que tienes seleccionadas.

(1) Al pulsar un Click, buscas si la fila está en la lista:
1a) Si está, borras ese indice de la lista
1b) Si no está, añades ese índice a la lista
2) Repintar el Grid

En el pintado del grid, lo que tienes que hacer es pintar de diferente color los índices de la lista.

rruffino 01-12-2011 14:35:21

Graacias por la respuesta
 
Hola Neftalí, gracias por la pronta y efectiva respuesta. Ya lo he podido hacer. Ahora lo que necesito es poder mostrar un numero fijo de filas, es decir, suponte que tengo 30 filas cargadas, yo quisiera ir mostrando de 10 en 10 en el stringgrid, eso es factible???
Muchas gracias nuevamente.
Saludos!:D

Neftali [Germán.Estévez] 01-12-2011 16:15:28

Cita:

Empezado por rruffino (Mensaje 420134)
lo que necesito es poder mostrar un numero fijo de filas, es decir, suponte que tengo 30 filas cargadas, yo quisiera ir mostrando de 10 en 10 en el stringgrid, eso es factible???

No te he entendido muy bien lo que quieres hacer.
¿Qué significa ir mostrando de 10 en 10?
¿Cómo cambias a las siguientes?

Caro 01-12-2011 16:57:14

Hola rruffino, una función que salte a las siguientes X filas creo que no hay, tendrías que hacerte una mas o menos así:

Código Delphi [-]
procedure SaltarRows(StringGrid : TStringGrid; Cant : Integer);
var  RowActual, RowSig : Integer;
begin
 RowActual := StringGrid.Row;
 RowSig := RowActual+Cant;

 if RowSig<1 then
  RowSig:=1
 else
  if RowSig>StringGrid.RowCount-1 then
   RowSig := StringGrid.RowCount-1;

 StringGrid.Row := RowSig;
end;
//llamada
 SaltarRows(StringGrid1, 10);
 //o
 SaltarRows(StringGrid1, -10);

Saluditos

rruffino 01-12-2011 16:58:28

Explico un poco mejor
 
Amigo Neftali, gracias por responder.
Te trato de explicar un poco mejor.
Yo cargo el stringgrid con lo que saco de una consulta de una tabla.
Lo que quiero saber si se puede hacer es que el stringrid vaya mostrando de a 10 filas para evitar usar el scrollbar. De esta forma, si yo en la consulta obtuve 30 registros que pase al stringgrid, mostraria los primeros 10 en el stringgrid, luego de alguna forma deberia decirle al stringgrid que muestre del 11 al 20 y luego del 21 al 30.
Espero me hayas entendido.
Gracias!!

Neftali [Germán.Estévez] 01-12-2011 17:52:01

Ok, ahora lo he entendido.
Sí puedes hacerlo, básicamente se trata de cargar los que quieras.

Imagino que al ser un TStringGrid y los datos que provienen de una tabla debes hacer la carga manualmente con un:

Código Delphi [-]
  while not Query.EOF do
   ....

En este caso basta con que realices un FOR y cargues sólo los 10 primeros registros que te devuelve la consulta. Mantienes el DataSet (Query) abierto, y para cargar los siguientes, vuelves a utilizar un FOR desde el registro en el que te habías quedado.

Como alternativa puedes volcar el resultado sobre un TclientDataset, cerrar la consulta, y consumir los datos desde ahí, pero en todo aso, esto puedes hacerlo si es necesario en un segundo paso, cuando ya funcione lo primero.


La franja horaria es GMT +2. Ahora son las 21:34:55.

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