Virer les doublons des combobox [erreur inside]

Virer les doublons des combobox [erreur inside] - Delphi/Pascal - Programmation

Marsh Posté le 14-11-2003 à 16:41:45    

Salut à toutes et à tous,
 
Voila tout est dans le titre. J arrive pas à virer les doublons dans les comboboxes !
voici mon code:
 

Code :
  1. procedure TForm_Main.FilCmbBx_01(Sender: TObject;
  2.   var Key: Char);
  3. var iTag : integer;
  4.     strtemp : string;
  5.   //sub procedure that cleanse the TStrings from doubles
  6.   procedure DeleteDuplicates(TStrings_out : TStrings);
  7.   var TempList : TStrings;
  8.   begin
  9.     TempList := TStringList.Create;
  10.     try
  11.       TempList.AddStrings(TStrings_out);
  12.       TempList.Sorted := True;
  13.       TempList.Duplicates := dupIgnore;
  14.     finally
  15.       TempList.Free;
  16.     end;//try... finally
  17.   end;// deleteDuplicates
  18. begin
  19.   iTag := 0;
  20.   if ord(key) = VK_RETURN then begin
  21.     iTag := (Sender as TFillcombobox).Tag;
  22.     // modified on the 14/11/2003
  23.     DeleteDuplicates(FFillCmb[iTag].Items);
  24.     end;//if
  25. end;


 
ca suxx hard car j ai lu dans l aide que TStringList implemente une propriétée qui ignore les doublons mais ca ne marche pas la !
 
Antp HELP  :cry:  
 
 
@++


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 14-11-2003 à 16:41:45   

Reply

Marsh Posté le 14-11-2003 à 17:14:11    

Premier bug de ton truc : tu vires ta TempList et tu ne touches pas à TStrings_out qui n'est donc pas modifié.
Puis tu as dû mal lire l'aide :

Citation :

dupIgnore Ignore attempts to add duplicate strings to the  
[...]
Set Duplicates before adding any strings to the list. Setting Duplicates to dupIgnore or dupError does nothing about duplicate strings that are already in the list.


:o
En fait tu devrais le mettre à DupIgnore _avant_ :D
(et peut-être mettre les chaînes une par une, ça ne sais pas)
Pour enlever les doubles ce que je ferais c'est trier la liste et ensuite la parcourir. Si la chaîne est la même que la précédente je la supprime (en faisant gaffe de le faire de n-1 à 0).
Je pense que pour juste virer les doublons la méthode de tout copier dans une liuste temporaire est fort lourde.


Message édité par antp le 14-11-2003 à 17:14:44

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-11-2003 à 17:21:08    

:cry:  
 
je te separes jamais de ton baton hein ????
ok pour les commentaires mais le probleme c est que les proprietes "Sorted" et "Duplicates" ne sont pas reconnues.
 
Tu ne ferais comme ca???? comment alors? Doubles listes, comparaison et suppression des chaines deja trouvees? Si j ai bien compris l'aide (mais je suis fatigué la  :whistle: ) la TStringList le fait toute seule comme une grande !
 
@++


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 14-11-2003 à 17:26:40    

Re,
 
évidement quand tu déclares TStringList c est tout de suite mieux  :pt1cable: !

Code :
  1. procedure TForm_Main.FilCmbBx_01(Sender: TObject;
  2.   var Key: Char);
  3. var iTag : integer;
  4.     strtemp : string;
  5.   //sub procedure that cleanse the TStrings from doubles
  6.   procedure DeleteDuplicates(TStrings_out : TStrings);
  7.   var TempList : TStringList;
  8.   begin
  9.     TempList := TStringList.Create;
  10.     try
  11.       TempList.Sorted := True;
  12.       TempList.Duplicates := dupIgnore;
  13.       TempList.AddStrings(TStrings_out);
  14.       TStrings_out.clear;
  15.       TStrings_out.addstrings(TempList);
  16.     finally
  17.       TempList.Free;
  18.     end;//try... finally
  19.   end;// deleteDuplicates
  20. begin
  21.   iTag := 0;
  22.   if ord(key) = VK_RETURN then begin
  23.     iTag := (Sender as TFillcombobox).Tag;
  24.     // modified on the 14/11/2003
  25.     DeleteDuplicates(FFillCmb[iTag].Items);
  26.       end;//if
  27. end;


@++


Message édité par KrzAramis le 14-11-2003 à 17:27:48

---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 14-11-2003 à 17:28:58    

krzAramis a écrit :

Si j ai bien compris l'aide (mais je suis fatigué la  :whistle: ) la TStringList le fait toute seule comme une grande !


 
C'est utile si tu ajoutes de temps en temps des chaînes ; mais pour virer tous les doubles c'est un peu inutile je pense, autant faire une petite boucle comme je l'ai expliqué : ça évite de faire une seconde liste temporaire, et niveau code produit c'est plus léger (quand tu copies tes chaînes de l'une dans l'autre, j'imagine qu'à chaque insertion il regarde si la chaîne existe).


Message édité par antp le 14-11-2003 à 17:29:52

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-11-2003 à 17:40:23    

C est exact (cf insertion).
Ok je vais repenser ma procedure .... arf je pensais que ca serai bien comme code[:huit] . Quel dommage.
 
Bon la il faut que je vire le beep lorsque l utilisateur appuye sur 'Entrée' parce que ca me soule !
 
@++


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed