Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Celdas seleccionadas en un DrawGrid (https://www.clubdelphi.com/foros/showthread.php?t=75458)

chinchan 25-08-2011 13:06:28

Celdas seleccionadas en un DrawGrid
 
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

Cita:

Empezado por chinchan (Mensaje 410078)
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:
Código:

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

Cita:

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:
Código:

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:
Código:

/* 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

Cita:

Empezado por chinchan (Mensaje 410665)
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, gracias.


La franja horaria es GMT +2. Ahora son las 07:53:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi