Comment connaitre position index ListBox avant Sorted ?

Résolu
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 27 févr. 2009 à 10:03
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 28 févr. 2009 à 01:19
Bonjour,

Je veux trier les valeurs de mon listbox par ordre Alpha, pour ce faire j'utilise la fonction Sorted.

Mon probleme c'est qu'avant le tri chaque index renvoyé vers un fichier spécifique, si je les trie, il renverront vers un fichier qui ne correspond plus au leurs.

Je pense que j'aurai donc besoin d'une sorte de Table de Corresspondances...

Aussi, comment je peux par exemple savoir que  la valeur qui se trouvez en index2 se retrouve désormais en index7... .?

Merci pour vos conseils.

4 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 févr. 2009 à 14:37
Salut,

y avait plus simple ,




{
 Démo d'utilisation de TObject contenu dans TStrings pour
stocker un entier
 Déposer:
         1 TListBox
         1 TLabel

         1 TButton
 et compléter comme suit:
}






// fonction qui génère un texte aléatoirement de
longueur aLen




function

GetRandomStr(const aLen: Integer): string;
var
I: Integer;
begin
  Result
:= EmptyStr;
  for I : = 1to aLen do
    Result := Result + Chr(Random(26)+65);
end ;

procedure
TForm1.Button1Click(Sender: TObject);
begin
  // on tri la
liste
  ListBox1.Sorted : = True;
end;

procedure
TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin

  Randomize;
  // on génere 20 Strings
alléatoirement
  for I := 0 to 19do
   // et on les ajoutes à la ListBox et on en profite
  // pour mémoriser la place d'origine
    ListBox1.Items.AddObject(GetRandomStr(8),
TObject(I));
end;

procedure TForm1.ListBox1Click(Sender: TObject);

const lbl_Str = 'Item:
%s place d''origine: %d place courante: %d';
begin
// et pour tester
on affiche, au click,
// le nom de l'Item
sa position d'origine dans la liste
// et
sa position actuelle (après tri)
  with
ListBox1 do
    Label1.Caption
:= Format(lbl_Str, [Items[ItemIndex],

                        Integer(Items.Objects[ItemIndex]), ItemIndex]);

end ;

 
@+
Cirec

<hr siz ="" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 févr. 2009 à 13:54
en entrant tes données comme suis :

1/C:\my programs\
2/D:\Swap\
3/C:\Windows\System32

ensuite avec la fonction qui vas bien tu peu resortir l'index du string ... huhuhuhu

GetStrPart(ListBox.Items[X], '/', 1) ----> index
GetStrPart(ListBox.Items[X], '/', 2) ----> chaine

function GetStrPart(const Str, Delimiter: String; const Index: cardinal = 1): String;
var I,P1,P2 : integer;
begin
  Result := '';
  if (posex(Delimiter,Str[1]) = 1) and (Index <= 1) then exit;
  P1 := 1;
  for I := 1 to Index-1 do begin
      P1 := posex(Delimiter, Str, P1);
      if P1 = 0 then exit
      else P1 := P1 + length(Delimiter);
  end;
  P2 := posex(Delimiter, Str, P1);
  if P2 = 0 then P2 := length(Str) + 1;
  Result := copy(Str, P1, P2 - P1);
end;

<hr width="100%" size="2" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 févr. 2009 à 14:45
@ F0xi:
ta méthode pose un problème au niveau du tri !!!
il faudrait mettre l'index à la fin et non au début des Items

Mais le fait d'utiliser TObject évite justement de modifier la chaine d'origine

 
@+
Cirec

<hr siz="" />
0
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
28 févr. 2009 à 01:19
Effectivement ca repond pleinement à ce que je voulais faire.

Merci beaucoup.
0
Rejoignez-nous