Delphi ordonner combobox [Résolu]

Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
- - Dernière réponse : floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
- 5 juin 2009 à 10:56
Bonjour à tous,
j'explique mon probleme :
j'ai une liste déroulante générée automatiquement.
Cette derniere contient des dates :
01/04/09
05/06/09 etc...
Le probleme est que Delphi les ordonnent avec le premier chiffre qu'il rencontre :
ainsi j'obtiens
01/04/09
05/04/09
06/04/08
07/04/09

je voudrais donc savoir si il existait un moyen de la triée par années dans un premier temps puis par mois, comme la logique le voudrait.

Par avance Merci.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
34
3
Merci
au temps pour moi :

type
  TDateOrder = (doDMY, doDYM, doYMD, doYDM, doMYD, doMDY);

procedure ConvertDates(Strings: TStrings; const InOrder,OutOrder: TDateOrder);
var N : integer;
    ST, Dy, Mo, Ye: String;
begin
  Strings.BeginUpdate;
  try
    for N := 0 to Strings.Count-1 do
    begin
      if length(Strings[N]) = 6 then
      begin
        ST := Strings[N];
        case InOrder of
          doDMY : begin Dy := ST[1]+ST[2]; Mo := ST[3]+ST[4]; Ye := ST[5]+ST[6]; end;
          doDYM : begin Dy := ST[1]+ST[2]; Mo := ST[5]+ST[6]; Ye := ST[3]+ST[4]; end;
          doYMD : begin Dy := ST[5]+ST[6]; Mo := ST[3]+ST[4]; Ye := ST[1]+ST[2]; end;
          doYDM : begin Dy := ST[3]+ST[4]; Mo := ST[5]+ST[6]; Ye := ST[1]+ST[2]; end;
          doMYD : begin Dy := ST[5]+ST[6]; Mo := ST[1]+ST[2]; Ye := ST[3]+ST[4]; end;
          doMDY : begin Dy := ST[1]+ST[2]; Mo := ST[1]+ST[2]; Ye := ST[5]+ST[6]; end;
        end;
 
        case OutOrder of
          doDMY :Strings[N] := Dy+'/'+Mo+'/'+Ye;
          doDYM :Strings[N] := Dy+'/'+Ye+'/'+Mo;
          doYMD :Strings[N] := Ye+'/'+Mo+'/'+Dy;
          doYDM :Strings[N] := Ye+'/'+Dy+'/'+Mo;
          doMYD :Strings[N] := Mo+'/'+Ye+'/'+Dy;
          doMDY :Strings[N] := Mo+'/'+Dy+'/'+Ye;
        end;
      end;
    end;
  finally
    Strings.EndUpdate;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var TSL : TStringList;
begin
  TSL := TStringList.Create;
  try
    TSL.Add('091223');
    TSL.Add('091023');
    TSL.Add('991012');
    TSL.Add('990112');
    TSL.Add('071117');
    TSL.Add('041228');
    TSL.Add('040128');
    TSL.Sorted := true;
    TSL.Sorted := false;
    ConvertDates(TSL, doYMD, doDMY);
    ListBox1.Items.Assign(TSL);
   finally
    TSL.Free;
  end;
end;

<hr size="2" width="100%" />

Dire « Merci » 3

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

Codes Sources 90 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
12
0
Merci
salut
A toi de trier ta liste avant de nourrir la combobox
L'autre solution serait de choper les dates "à l'envers" : 09/04/01
a+
Commenter la réponse de JulioDelphi
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15
0
Merci
bonjour,

dates "à l'envers" : 09/04/01

09/04/01
88/04/05

cantador
Commenter la réponse de cs_cantador
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
0
Merci
Extraire les dates à l'envers de m'intéresse pas puisquequ'à la base avant d'envoyer ces dates dans la liste déroulante je les converties déjà au format FR
Avant d'être dans la combobox elles sont sous cette forme:
090426 (26 avril 2009)
puis je les transforme pour plus de lisibilité pour l'utilisateur en
26/04/09

Une autre idée?
Commenter la réponse de floppy41
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
41
0
Merci
Salut,

eh ben ... t'as tout ce qu'il faut ... il suffit de le faire dans le bon sens:

1) tu récupères les dates sans en changer le format
2) tu tries la liste (StringList .Sorted := True)
3) tu modifies le format pour avoir une date "Fr"
4) et tu renvois la liste au ComboBox

voilà c'est tout ....

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
34
0
Merci
ce qui donne :

type
  TDateOrder = (doDMY, doDYM, doYMD, doYDM, doMYD, doMDY);

procedure ConvertDates(String: TStrings; const InOrder,OutOrder: TDateOrder);
var N : integer;
    ST, Dy, Mo, Ye: String;
begin
  Strings.BeginUpdate;
  try
    for N := 0 to Strings.Count-1 do
    begin
      if length(Strings[N]) = 6 then
      begin
        ST := Strings[N];
        case InOrder of
          doDMY : begin Dy := ST[1]+ST[2]; Mo := ST[3]+ST[4]; Ye := ST[5]+ST[6]; end;
          doDYM : begin Dy := ST[1]+ST[2]; Mo := ST[5]+ST[6]; Ye := ST[3]+ST[4]; end;
          doYMD : begin Dy := ST[5]+ST[6]; Mo := ST[3]+ST[4]; Ye := ST[1]+ST[2]; end;
          doYDM : begin Dy := ST[3]+ST[4]; Mo := ST[5]+ST[6]; Ye := ST[1]+ST[2]; end;
          doMYD : begin Dy := ST[5]+ST[6]; Mo := ST[1]+ST[2]; Ye := ST[3]+ST[4]; end;
          doMDY : begin Dy := ST[1]+ST[2]; Mo := ST[1]+ST[2]; Ye := ST[5]+ST[6]; end;
        end;
 
        case OutOrder of
          doDMY :Strings[N] := Dy+'/'+Mo+'/'+Ye;
          doDYM :Strings[N] := Dy+'/'+Ye+'/'+Mo;
          doYMD :Strings[N] := Ye+'/'+Mo+'/'+Dy;
          doYDM :Strings[N] := Ye+'/'+Dy+'/'+Mo;
          doMYD :Strings[N] := Mo+'/'+Ye+'/'+Dy;
          doMDY :Strings[N] := Mo+'/'+Dy+'/'+Ye;
        end;
      end;
    end;
  finally
    Strings.EndUpdate;
  end;
end;

procedure Form1.EvenementQuelconque(Sender: TObject);
var TSL : TStringList;
begin
  TSL := TStringList.Create;
  try
    TSL.LoadFromFile('dates.txt');
    TSL.Sorted := true;
    TSL.Sorted := false;
    ConvertDates(TSL, doYMD, doDMY);
    ComboBox1.Items.Assign(TSL);
   finally
    TSL.Free;
  end;
end;

<hr size="2" width="100%" />
Commenter la réponse de f0xi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
12
0
Merci
Il est fort ce foxi, il est fort ... ^^
Commenter la réponse de JulioDelphi
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
0
Merci
Pas tout compris au message de f0xi... en plus Delphi en veut pas...


Cirec, tu disais de faire un stringlist.sorted


seulement j'ai toutes mes dates dans un tableau de type string


et les commandes la_liste_date.sorted ne fonctionne pas étant donné que ça s'applique a des objet et pas a des tableaux.


Une autre idée? Merci 
Commenter la réponse de floppy41
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
12
0
Merci
Une autre idée ? Reessaie la soluce de foxi qui est 100% bonne !
"Delphi en veut pas" si tu veux mon avis, le problème se situe entre le clavier et la chaise ...
Commenter la réponse de JulioDelphi
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
0
Merci
Oh oh la touche d'humour, j'ai jamais dit que j'étais un professionnel... et j'suis tout à fait d'accord, le problème est bien la, seulement j'ai beau faire un vulgaire copier coller (en adpatant biensur...) il refuse de me le compiler.
Alors pourriez vous s'il vous plait m'expliquer ce qu'il faut faire (faut rajouter un truc dans les uses?).
Merci.
Commenter la réponse de floppy41
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
12
0
Merci
^^ PEBKAC comme on dit :p
euh et bien deja, y a t-il un message d'erreur de compilation ? si oui, je voudrais le connaitre.
Le type, est-il bien déclaré avec les autres types ?
L'evenementquelquonque est placé/lancé comment sur ton code ?
Commenter la réponse de JulioDelphi
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Dernière intervention
6 novembre 2009
0
Merci
Au temps pour moi également, j'avais fait quelqus erreurs ^^
Cette solution est tout à fait adaptée et de plus permet de convertir avec le format que l'on souhaite.
Excellent!
Merci.
Commenter la réponse de floppy41

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.