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

Messages postés
199
Date d'inscription
samedi 3 janvier 2004
Dernière intervention
17 décembre 2014
- - Dernière réponse : vieuxpere
Messages postés
199
Date d'inscription
samedi 3 janvier 2004
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
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 ="" />

Merci Cirec 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
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" />
Commenter la réponse de f0xi
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
@ 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="" />
Commenter la réponse de Cirec
Messages postés
199
Date d'inscription
samedi 3 janvier 2004
Dernière intervention
17 décembre 2014
0
Merci
Effectivement ca repond pleinement à ce que je voulais faire.

Merci beaucoup.
Commenter la réponse de vieuxpere

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.