informatixo
Messages postés129Date d'inscriptionmercredi 4 février 2004StatutMembreDernière intervention25 juillet 2012
-
16 oct. 2008 à 09:21
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
17 oct. 2008 à 11:19
Bonjour le forum,
J'ai un petit souci avec le code suivant :
procedure TForm2.Button1Click(Sender: TObject);
var
ItemTampon: TListItem;
begin
ItemTampon := ListView1.Items[1];
ListView1.Items[1] := ListView1.Items[0];
ListView1.Items[0] := ItemTampon;
end;
Le problème avec ce code c'est que j'ai deux fois la même ligne dans le ListView après l'inversion.
Dès que la deuxième instruction est passée, "ItemTampon" prend aussi la
nouvelle valeur. Ce qui me fait dire que c'est c'est n'est pas une
affectation de valeur mais de référence, j'ai l'impression que
"ItemTampon" pointe vers la valeur de "ListView1.Items[1]".
Quelqu'un pourrait-il me venir en aide SVP ? Je n'arrive pas à
retrouver le message du forum qui expliquait le mécanisme pour copier
en valeur et non par référence.
informatixo
Messages postés129Date d'inscriptionmercredi 4 février 2004StatutMembreDernière intervention25 juillet 20121 16 oct. 2008 à 23:17
Je suis désolé si je n'ai pas été assez clair mais je crois que cirec a compris ce que je voulais faire.
Imaginons que j'ai une simple ListView avec deux colonnes et trois lignes, je veux pouvoir intervertir deux lignes en cliquant sur un bouton par exemple. Ceci est un problème simpliste mais il me permettras de régler mon problème plus complexe.
Cirec ton code fonctionne parfaitement. De mon côté j'avais essayé avec le "Create" mais comme je ne faisait pas le "Assign" après ça ne marchait pas.
Quelqu'un pourrait-il m'expliquer pourquoi même après un "Create" l'instruction "ItemTampon := ListView1.Items[1];" ne fonctionne pas comme une affectation de variable traditionnelle et qu'il faut impérativement faire un "Assign" ? En effet, si je change "ListView1.Items[1]" à l'instruction suivante et bien "ItemTampon" change aussi alors que si je prend l'exemple suivant ça fonctionne :
var
a, b: Integer;
begin
b := 5;
a := b;
b := 7;
ShowMessage(IntToStr(a)); // Ici a vaut bien 5 et non pas 7.
end;
Certes mon problème est résolu mais je souhaite, ne serais-ce que pour progresser, avoir une réponse à cette dernière question ou du moins une piste pour que je puisse trouver le pourquoi du comment.
En attendant, un grand merci à tous les deux pour votre aide et bonne continuation à tous..
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 17 oct. 2008 à 11:19
Je suis désolé si je n'ai pas été assez clair...
Non, non en fait, le titre est réservé au thème et la question doit-être formulée dans le corps du message et du coup j'en ai oublié le titre..
Mais comme cirec, un p'ti gars tout frêle, menu, pauvre et désoeuvré a vu de la lumière allumée il est entré et a pris une bière (lol)
Et il a un gros défaut, il trouve en général les bonne réponses et son code fonctionne nickel chrome.