Comment connaitre position index ListBox avant Sorted ? [Résolu]

Signaler
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014
-
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014
-
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.
A voir également:

4 réponses

Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
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 ="" />
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
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" />
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
@ 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="" />
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Effectivement ca repond pleinement à ce que je voulais faire.

Merci beaucoup.