| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Jue 23 Oct, 2008 11:02 pm Asunto: intercambio de dos items en un listview |
|
|
Hola de nuevo.
Tengo un pequeño problema al intercambiar 2 items dentro de un listview.
el codigo que uso es: | Código: | int x;
TListItem * Elemento;
TListItem * Elemento2;
for(x=1;x<canales>Items->Count;x++){
if(canales->Items->Item[x]->Selected){
Elemento=canales->Items->Item[x];
Elemento2=canales->Items->Item[x-1];
canales->Items->Item[x-1]=Elemento;
canales->Update();
canales->Items->Item[x]=Elemento2;
canales->Update();
break;
}
}
|
El problema está en que Elemento y Elemento2 son punteros y cuando cambio el valor del item Elemento2 toma el valor de Elemento
¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere
Saludos, Bosoft |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 24 Oct, 2008 7:50 am Asunto: Re: intercambio de dos items en un listview |
|
|
| bosoft escribió: | ¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere |
No lo he probado nunca, pero inténtalo con swap. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Vie 24 Oct, 2008 1:10 pm Asunto: Re: intercambio de dos items en un listview |
|
|
| Angel escribió: | | bosoft escribió: | ¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere |
No lo he probado nunca, pero inténtalo con swap. |
Hola Angel.
Podrías ponerme una linea ejemplo? No encuentro el swap desde items en el 2007
Gracias
Saludos, Bosoft. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Dom 26 Oct, 2008 10:50 pm Asunto: |
|
|
Quizás esto te sirva de ayuda:
| Código: | void CambiaItems(TListItem* Elemento1, TListItem* Elemento2)
{
TListItem* Temporal = new TListItem(Elemento1->Owner);
Temporal->Caption = Elemento1->Caption;
Temporal->SubItems->Assign(Elemento1->SubItems);
Elemento1->Caption = Elemento2->Caption;
Elemento1->SubItems->Assign(Elemento2->SubItems);
Elemento2->Caption = Temporal->Caption;
Elemento2->SubItems->Assign(Temporal->SubItems);
delete Temporal;
}
|
Si tienes que cambiar más datos, como imágenes..., sigue el método de este ejemplo.
Saludos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 27 Oct, 2008 9:53 am Asunto: Re: intercambio de dos items en un listview |
|
|
| bosoft escribió: | | Podrías ponerme una linea ejemplo? No encuentro el swap desde items en el 2007 |
swap es un comando de la librería estándar de C++. De acuerdo con la ayuda genérica de Builder:
| Cita: | Standard C++ Library: Class Reference
swap
Summary
Exchanges values.
Synopsis
#include <algorithm>
template <class>
void swap (T& a, T& b);
Description
The swap algorithm exchanges the values of a and b. The effect is:
T tmp = a
a = b
b = tmp |
Por lo tanto debería funcionarte algo así:
| Código: | swap(Elemento, Elemento2); |
Pero ya te digo que no lo he hecho; simplemente, he aplicado la lógica del comando lo que no significa que esté bien. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Lun 27 Oct, 2008 6:38 pm Asunto: |
|
|
Muchas gracias a los dos, probaré de las 2 maneras a ver cual es mas cómoda
Saludos, Bosoft |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 11 Nov, 2008 1:04 am Asunto: |
|
|
Aquí dejo un código mas optimizado para intercambiar dos Item de un ListView
| Código: | void CambiaItems(TListItem* Elemento1, TListItem* Elemento2)
{
if(Elemento1==0 || Elemento2==0) return;
TListItem* Temporal = new TListItem(Elemento1->Owner);
Temporal->Assign(Elemento1);
Elemento1->Assign(Elemento2);
Elemento2->Assign(Temporal);
delete Temporal;
}
|
Saludos. |
|
| Volver arriba |
|
 |
|