 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
tecno Invitado
|
Publicado: Mie 27 Nov, 2002 1:47 pm Asunto: Columnas de un StringGrid... |
|
|
¡Hola a tod@s!
¿Cómo puedo cambiar de posición entre sí dos columnas en un StringGrid por código?
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 27 Nov, 2002 2:11 pm Asunto: |
|
|
Hola Tecno:
Una forma de hacerlo:
void SGIntercambiaColumna(TStringGrid *sg, int nCol1, int nCol2)
{
TStringList *tmpCol = new TStringList;
tmpCol->Assign(sg->Cols[nCol1]);
sg->Cols[nCol1]->Assign(sg->Cols[nCol2]);
sg->Cols[nCol2]->Assign(tmpCol);
delete tmpCol;
}
Y como ejemplo de utilización:
SGIntercambiaColumna(StringGrid1, 1, 3);
Saludos:
_Leo |
|
| Volver arriba |
|
 |
tecno Invitado
|
Publicado: Mie 27 Nov, 2002 4:21 pm Asunto: |
|
|
¡Hola _Leo!
Gracias por contestar. La idea que me propones se me ocurrió pero me daba error porque en lugar de hacerlo con "Assign" lo hice con "=". Al final lo que he hecho a sido lo mismo pero en vez de una variable temporal he usado una columna temporal del propio grid. Como la creo, la uso y la destruyo, todo ello en menos de 10 líneas, no se nota. De todas formas, gracias por hacerme ver el error que cometí.
Salu2. |
|
| Volver arriba |
|
 |
tecno Invitado
|
Publicado: Mie 27 Nov, 2002 4:25 pm Asunto: |
|
|
¡Ah!, se me olvidaba...
Buscando en internet encontré otra forma de solucinarlo, en código delphi, pero mucho mas liosa. Proponían derivar de TCustomGrid una clase que tuviese los métodos MoveColumn y MoveRow de TCustomGrid. Yo lo que digo es, ¿por qué son métodos protegidos?. Los podían haber integrado en TStringGrid.
Estos de Borlaaaand...
Salu2.  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 27 Nov, 2002 5:34 pm Asunto: |
|
|
Bueno, podemos hacer un poco de "trampa", aunque el comportamiento de MoveColumn no es el mismo que el de la función anterior, ya que la función anterior *intercambia* las columnas, mientras que MoveColumn mueve la columna a la nueva posición insertándola y desplazando así las que pilla por el medio:
| Código: | void MoverColumna(TStringGrid *sg, int desde, int hasta)
{
struct TStringGridX : public TStringGrid
{
void __fastcall MoverColumna(int desde, int hasta)
{
MoveColumn(desde, hasta);
}
};
static_cast<TStringGridX*>(sg)->MoverColumna(desde, hasta);
}
|
MoverColumna(StringGrid1, 1, 3); |
|
| Volver arriba |
|
 |
tecno Invitado
|
Publicado: Mie 27 Nov, 2002 7:04 pm Asunto: |
|
|
¡Hola _Leo!
Lo que pones se parece mucho (si no es exáctamente lo mismo) a lo que he leido, pero en C++. Como tu bien dices, una cosa es mover una columna y otra intercambiar dos, que es lo que yo quiero. Por tanto, la primera idea es la "guapa".
Bueno tío, gracias por todo y salu2.  |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|