Delphi ordonner combobox [Résolu]

floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention - 3 juin 2009 à 16:09 - Dernière réponse : floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention
- 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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 juin 2009 à 17:44
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%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de f0xi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 4 juin 2009 à 09:06
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 4 juin 2009 à 11:09
0
Merci
bonjour,

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

09/04/01
88/04/05

cantador
Commenter la réponse de cs_cantador
floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention - 4 juin 2009 à 11:15
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
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 4 juin 2009 à 11:36
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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 juin 2009 à 12:14
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 4 juin 2009 à 16:06
0
Merci
Il est fort ce foxi, il est fort ... ^^
Commenter la réponse de JulioDelphi
floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention - 4 juin 2009 à 16:06
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 4 juin 2009 à 16:17
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
floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention - 4 juin 2009 à 16:20
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 4 juin 2009 à 16:35
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
floppy41 25 Messages postés vendredi 27 juin 2008Date d'inscription 6 novembre 2009 Dernière intervention - 5 juin 2009 à 10:56
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.