begin process at 2008 07 05 05:44:53
1 205 051 membres
37 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TRI DE CHIFFRE , DATE OU TEXT DANS UN TLISTVIEW


Information sur la source



Description

Exemple d'implémentation de tri dans un tlistview pour des dates, chiffres ou du texte

Source

  • function CustomSortProc(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
  • var date1,date2:tdatetime;
  • ix:integer;
  • begin
  • ix :=abs(Paramsort) -1;
  • if not TryStrToDate(item1.SubItems[ix],date1) then
  • date1:=strtodate('01/01/1799');
  • if not TryStrToDate(item2.SubItems[ix],date2) then
  • date2:=strtodate('01/01/1799');
  • result:=CompareDate(date1,date2);
  • if paramsort<0 then result:=-result;
  • end;
  • function CustomSortProcTime(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
  • var date1,date2:tdatetime;
  • ix:integer;
  • begin
  • ix :=abs(Paramsort) -1;
  • if not TryStrToDatetime(item1.SubItems[ix],date1) then
  • date1:=strtodatetime('01/01/1799 00:00:00');
  • if not TryStrToDatetime(item2.SubItems[ix],date2) then
  • date2:=strtodatetime('01/01/1799 00:00:00');
  • result:=CompareDatetime(date1,date2);
  • if paramsort<0 then result:=-result;
  • end;
  • function CustomSortProcChif(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
  • var i1,i2:integer;
  • ix:integer;
  • begin
  • ix :=abs(Paramsort) -1;
  • if not TryStrToint(item1.SubItems[ix],i1) then
  • i1:=0;
  • if not TryStrToint(item2.SubItems[ix],i2) then
  • i2:=0;
  • result:=comparevalue(i1,i2);
  • if paramsort<0 then result:=-result;
  • end;
  • procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  • Data: Integer; var Compare: Integer);
  • var
  • ix:Integer;
  • begin
  • if croissant then
  • if ColumnToSort =0 then
  • Compare :=CompareText(Item1.Caption,Item2.Caption)
  • else begin
  • ix :=ColumnToSort -1;
  • Compare :=CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
  • end
  • else
  • if ColumnToSort =0 then
  • Compare :=CompareText(Item2.Caption,Item1.Caption)
  • else begin
  • ix :=ColumnToSort -1;
  • Compare :=CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
  • end;
  • end;
  • procedure TForm1.ListView1ColumnClick(Sender: TObject;
  • Column: TListColumn);
  • begin
  • croissant:= not croissant; //inversion du précédent ordre de tri
  • ColumnToSort :=Column.Index; //Quel colonne est à trier ?
  • //Ensuite on détermine quel est le type de colonne à trier:
  • //on peut aussi les déterminer en spécifiant un tag particulier dans chaque colonne
  • if pos('DateTime',Column.Caption)>0 then begin
  • if croissant then
  • (Sender as TCustomListView).CustomSort(@CustomSortProctime,column.index)
  • else
  • (Sender as TCustomListView).CustomSort(@CustomSortProctime,-column.index)
  • end
  • else
  • if pos('Date',Column.Caption)>0 then begin
  • if croissant then
  • (Sender as TCustomListView).CustomSort(@CustomSortProc,column.index)
  • else
  • (Sender as TCustomListView).CustomSort(@CustomSortProc,-column.index)
  • end
  • else
  • if pos('Chiffre',Column.Caption)>0 then begin
  • if croissant then
  • (Sender as TCustomListView).CustomSort(@CustomSortProcChif,column.index)
  • else
  • (Sender as TCustomListView).CustomSort(@CustomSortProcChif,-column.index)
  • end
  • else
  • (Sender as TCustomListView).AlphaSort; //Méthode de comparaison de text par défaut.
  • end;
function CustomSortProc(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
var date1,date2:tdatetime;
ix:integer;
begin
ix :=abs(Paramsort) -1;
  if not TryStrToDate(item1.SubItems[ix],date1) then
    date1:=strtodate('01/01/1799');

 if not TryStrToDate(item2.SubItems[ix],date2) then
    date2:=strtodate('01/01/1799');

  result:=CompareDate(date1,date2);
  if paramsort<0  then result:=-result;


end;
function CustomSortProcTime(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
var date1,date2:tdatetime;
ix:integer;
begin
ix :=abs(Paramsort) -1;
  if not TryStrToDatetime(item1.SubItems[ix],date1) then
    date1:=strtodatetime('01/01/1799 00:00:00');

 if not TryStrToDatetime(item2.SubItems[ix],date2) then
    date2:=strtodatetime('01/01/1799 00:00:00');

  result:=CompareDatetime(date1,date2);
  if paramsort<0  then result:=-result;


end;

function CustomSortProcChif(Item1,Item2:TListItem;ParamSort:integer):integer;stdcall;
var i1,i2:integer;
ix:integer;
begin
ix :=abs(Paramsort) -1;
  if not TryStrToint(item1.SubItems[ix],i1) then
    i1:=0;

 if not TryStrToint(item2.SubItems[ix],i2) then
    i2:=0;

  result:=comparevalue(i1,i2);
  if paramsort<0  then result:=-result;


end;

procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
ix:Integer;
begin
if croissant then
  if ColumnToSort =0 then
    Compare :=CompareText(Item1.Caption,Item2.Caption)
  else begin
    ix :=ColumnToSort -1;
    Compare :=CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
  end
else
  if ColumnToSort =0 then
    Compare :=CompareText(Item2.Caption,Item1.Caption)
  else begin
    ix :=ColumnToSort -1;
    Compare :=CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
  end;
end;

procedure TForm1.ListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
begin

 croissant:= not croissant; //inversion du précédent ordre de tri
  ColumnToSort :=Column.Index; //Quel colonne est à trier ?
//Ensuite on détermine quel est le type de colonne à trier:
//on peut aussi les déterminer en spécifiant un tag particulier dans chaque colonne
 if pos('DateTime',Column.Caption)>0 then begin
     if croissant then
    (Sender as TCustomListView).CustomSort(@CustomSortProctime,column.index)
    else
     (Sender as TCustomListView).CustomSort(@CustomSortProctime,-column.index)
  end
  else
  if pos('Date',Column.Caption)>0 then begin
     if croissant then
    (Sender as TCustomListView).CustomSort(@CustomSortProc,column.index)
    else
     (Sender as TCustomListView).CustomSort(@CustomSortProc,-column.index)
  end
  else
   if pos('Chiffre',Column.Caption)>0 then begin
     if croissant then
    (Sender as TCustomListView).CustomSort(@CustomSortProcChif,column.index)
    else
     (Sender as TCustomListView).CustomSort(@CustomSortProcChif,-column.index)
  end
  else
(Sender as TCustomListView).AlphaSort;  //Méthode  de comparaison de text par défaut.

end;
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

    Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source

DateTime par djeckelle

comparaison datetime par gabs77

datetime et sybase par ohmonbateau

Tri ListView par kabakas

tri par date lors de l'insertion de données dans une table par tchicomico

Graphique et sélection de dates par Ravi42100

Date sur Windev par midou256

pascal par guirguelia

Filter, trie sur Date par grandyaka54

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS