Delphi ordonner combobox

Résolu
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 novembre 2009
- 3 juin 2009 à 16:09
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
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.

12 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
4 juin 2009 à 17:44
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%" />
3
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
4 juin 2009 à 09:06
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+
0
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
4 juin 2009 à 11:09
bonjour,

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

09/04/01
88/04/05

cantador
0
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 novembre 2009

4 juin 2009 à 11:15
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
4 juin 2009 à 11:36
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="" />
0
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
4 juin 2009 à 12:14
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%" />
0
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
4 juin 2009 à 16:06
Il est fort ce foxi, il est fort ... ^^
0
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 novembre 2009

4 juin 2009 à 16:06
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 
0
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
4 juin 2009 à 16:17
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 ...
0
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 novembre 2009

4 juin 2009 à 16:20
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.
0
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
4 juin 2009 à 16:35
^^ 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 ?
0
floppy41
Messages postés
25
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 novembre 2009

5 juin 2009 à 10:56
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.
0