Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1396 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Ya til myen dordonner par ordre alphabetique ls mots ds une stringrid?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ya til myen dordonner par ordre alphabetique ls mots ds une stringrid?

n°279380
piloud
Posté le 04-01-2003 à 20:16:44  profilanswer
 

Bon voila ...  
j'ai une string grid 4 colonnes  
je me demandais si yavais une option pour ordonner les rangées selon lordre alphabetique de la premiere colonne .
 
Je suppose que non alors :
comment faire une boucle pour ordonner alphabetiquement les mots de la premiere colone ?  
 
 
merci d'avance

mood
Publicité
Posté le 04-01-2003 à 20:16:44  profilanswer
 

n°279506
taureau
Posté le 05-01-2003 à 09:39:42  profilanswer
 

tu peux utiliser cette unité qui a l'avantage de pouvoir trier des dates, des nombres ou des chaines
 


unit sortStringGrid;
 
{ © Olivier Dahan - odahan@cybercable.fr }
 
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, Grids, StdCtrls;
 
type
 TodColType = (odct_Date,odct_time,odct_DateTime,odct_numeric,odct_CaseString,odct_NoCaseString);
 
Procedure ODSortGrid(grid:TStringGrid;ColToSort:Integer;TypeCol:TodColType;FromRow,ToRow:integer;Ascending:Boolean);
 
implementation
                   
Procedure ODSortGrid(grid:TStringGrid;ColToSort:Integer;TypeCol:TodColType;FromRow,ToRow:integer;Ascending:Boolean);
var Ts:TStringList; i:integer; sg:tstringgrid;
 Function ToDate(const s:string):string;
 var y,m,d : word;
 begin
  if s='' then DecodeDate(now,y,m,d) else
  DecodeDate(StrToDate(s),y,m,d);
  result := FormatFloat('0000',y)+FormatFloat('00',m)+FormatFloat('00',d);
 end;
 Function ToTime(const s:string):string;
 var h,m,sx,ms:word;
 begin
  if s='' then
  DecodeTime(time,h,m,sx,ms)else
  DecodeTime(StrToTime(s),h,m,sx,ms);
  result := FormatFloat('00',h)+FormatFloat('00',m)+FormatFloat('00',sx)+FormatFloat('00',ms);
 end;
 Function ToDateTime(const s:string):string;
 var p:integer;
 begin
   
  p:=pos(' ',s);
  if p>0 then
   begin
    Result := ToDate(copy(s,1,p-1))+ToTime(copy(s,p+1,length(s)));
   end else result := '0000000000000000';
 end;
 Function ToNumeric(const s:string):string;
 var p:integer; sx:string;
 const z30 = '000000000000000000000000000000';
 function pad(z:integer):string;
 begin
  if z in [1..30] then result := copy(z30,1,z) else result :='';
 end;
 begin
  sx:='';
  for p:=1 to length(s) do
   if s[p] in (['0'..'9','-',',','.']-[ThousandSeparator]) then sx:=sx+s[p];
  p:=pos(DecimalSeparator,sx);
  if p>0 then
  result := pad(25-length(copy(sx,1,p-1)))+copy(sx,1,p-1)+'.'+copy(sx,p+1,length(sx))+pad(25-length(copy(sx,p+1,length(sx))))
  else result := pad(25-length(sx))+sx;
 end;
begin
 ts:=tstringlist.Create;
 try
  For i:=FromRow to ToRow do
   begin
    Case TypeCol of
     odct_Date : ts.AddObject(ToDate(grid.cells[ColToSort,i]),tobject(i));
     odct_Time : ts.AddObject(ToTime(grid.cells[ColToSort,i]),tobject(i));
     odct_DateTime : ts.AddObject(ToDateTime(grid.cells[ColToSort,i]),tobject(i));
     odct_Numeric : ts.AddObject(ToNumeric(grid.cells[ColToSort,i]),tobject(i));
     odct_CaseString : ts.AddObject(grid.cells[ColToSort,i],tobject(i));
     odct_NoCaseString : ts.AddObject(AnsiUpperCase(grid.cells[ColToSort,i]),tobject(i));
    end;
   end;
  ts.sorted := true;
  sg := TStringGrid.Create(application);
  try
   sg.ColCount := grid.colcount;
   sg.rowcount := ToRow-FromRow+1;
   sg.FixedCols := 0;
   sg.FixedRows := 0;
   if Ascending then
    For i:=0 to ts.count-1 do
     sg.Rows[i] := grid.Rows[integer(ts.objects[i])]
    else
    For i:=ts.count-1 downto 0 do
     sg.Rows[(ts.count-1)-i] := grid.Rows[integer(ts.objects[i])];
   For i:=FromRow to ToRow do
    Grid.Rows[i] := sg.Rows[i-FromRow];
  finally
   sg.free;
  end;
 finally
  ts.free;
 end;
end;
 
end.

n°279524
piloud
Posté le 05-01-2003 à 11:23:06  profilanswer
 

Bon je vais tester ca , merci beaucoup!

n°279528
piloud
Posté le 05-01-2003 à 11:40:12  profilanswer
 

:cry: j'y comprend rien a cet unit  :cry:  
 
 
je voit pas du tout comment l'utiliser .
moi jai une une string grid que jai deja faite et qui s'appelle "grille"
 
 

n°279567
taureau
Posté le 05-01-2003 à 13:44:27  profilanswer
 

c pas si compliqué quand meme  :D  
 
ODSortGrid(grille,0,odct_NoCaseString,1,grille.rowcount-1,true);
 
voila ça va te trier la colonne 0, sans tenir compte des majusucules/minuscules, en démarrant à la ligne 1 et jusqu'a la fin (c dans le cas ou la ligne 0 représente les en-tetes), et le trie se fera dans l'ordre ascendant soit alphabétique ici

n°279616
piloud
Posté le 05-01-2003 à 15:12:16  profilanswer
 

:ouch:  C ULTRA COMPLIQUE  :ouch:  
 
mais ca marche alors merci  :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Ya til myen dordonner par ordre alphabetique ls mots ds une stringrid?

 

Sujets relatifs
phpBB et les mots de pass cryptéRechercher les mots se terminant par "s" (Expr. Reg)
ordre d'affichage dee requete sql suivant contenu fichier textecouper les mots/phrases provenant d'une textarea trop longs ?
[HTML]forcé l'affichage des images ds un ordre précisCrée des liens à partir de mots dans un texte (expressions régulières)
[MySQL] Performance et ordre des champs[JAVA] tri alphabétique sur String[]
Question d'ordre générale sur vieux os[PHP][MySQL] Trier un datetime par ordre décroissant
Plus de sujets relatifs à : Ya til myen dordonner par ordre alphabetique ls mots ds une stringrid?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR