PDA

Ver la Versión Completa : Celdas seleccionadas en un DrawGrid


chinchan
25-08-2011, 13:06:28
Hola a todos. Tras muchos intentos y mirar por ahí, no logro saber cuantas filas (o celdas) tengo selecionadas en un DrawGrid. Le he puesto en Options activado el goRangeSelect, y al seleccionar unas celdas de una columna, ¿cómo puedo saber cuantas he seleccionado y cuales?. Muchas Gracias.

ecfisa
25-08-2011, 14:19:36
Hola a todos. Tras muchos intentos y mirar por ahí, no logro saber cuantas filas (o celdas) tengo selecionadas en un DrawGrid. Le he puesto en Options activado el goRangeSelect, y al seleccionar unas celdas de una columna, ¿cómo puedo saber cuantas he seleccionado y cuales?. Muchas Gracias.
Hola chinchan.

Vas a tener que valerte de la propiedad Selection del TDrawGrid

Ejemplo:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TGridRect GR = DrawGrid1->Selection;
TVarRec vr[] = {GR.Left,GR.Top,GR.Right,GR.Bottom};
ShowMessage(Format("Col_Ini:%d \nFil_Ini:%d \nCol_Fin:%d \nFil_Fin:%d",vr,4));
}


Saludos.

chinchan
25-08-2011, 16:35:14
Muchas Gracias. Funcionaaaaa. La verdad que no entiendo muy bien lo que quiere decir el código, pero me vale. De nuevo Gracias.

ecfisa
25-08-2011, 16:58:22
La verdad que no entiendo muy bien lo que quiere decir el código
Hola chinchan.

El tema no es complicado, la propiedad Selection te devuelve un struct (TGridRect) con los límites de la selección actual.
Es decir que el código anterior sin mostrar los valores queda reducido a:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TGridRect GR = DrawGrid1->Selection;
}

Donde:

GR.Left = Columna inicial de la selección
GR.Top = Fila inicial de la selección
GR.Right = Columna final de la selección
GR.Bottom = Fila final de la selección


Un saludo.

ecfisa
25-08-2011, 17:12:01
Hola de nuevo.

Por si te clarifica el funcionamiento, te pongo un código que usa un TStringGrid para simplificar (aunque el manejo es el mismo).

Agregá un StringGrid y un ListBox a un form.

Ejemplo:

/* Llenar el StringGrid con valores */
void __fastcall TForm1::FormShow(TObject *Sender)
{
for(int f=0; f < StringGrid1->RowCount; f++)
for(int c=0; c < StringGrid1->ColCount; c++)
StringGrid1->Cells[f][c]= IntToStr(f+c);
}

/* Mostrar selección en ListBox */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TGridRect GR = StringGrid1->Selection;
AnsiString s;
for(int f=GR.Top; f <= GR.Bottom; f++){
s= "";
for(int c=GR.Left; c <= GR.Right; c++)
s = s + StringGrid1->Cells[f][c];
ListBox1->Items->Add(s);
}
}

Notarás que para recorrer la selección, obtuve la fila inicial y final de GR.Top / GR.Bottom y las columnas inicial y final de GR.Left / GR.Right.

Un saludo.

chinchan
02-09-2011, 02:23:41
Muchas Gracias por tu aclaración. Gracias a ello lo he podido adaptar perfectamente a mi programa. Gracias de nuevo. Una cosa mas... ¿cómo puedo cambiar el color de fondo (background) de las celdas seleccionadas del DrawGrid?. El azul que sale por defecto coincide prácticamente con el color de fuente que utilizo.

Casimiro Notevi
02-09-2011, 02:49:33
Muchas Gracias por tu aclaración. Gracias a ello lo he podido adaptar perfectamente a mi programa. Gracias de nuevo. Una cosa mas... ¿cómo puedo cambiar el color de fondo (background) de las celdas seleccionadas del DrawGrid?. El azul que sale por defecto coincide prácticamente con el color de fuente que utilizo.

Pregunta nueva... en hilo nuevo.
Recuerda nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias.