vieuxpere
Messages postés197Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 décembre 2014
-
27 févr. 2009 à 10:03
vieuxpere
Messages postés197Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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... .?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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],
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;