Bonsoir à tous.

Je bute sur un problème de tri avec une clé comportant des espaces.

Pour faire court je joint un source le plus expurgé possible.

la définition de la Form :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
object Fsortdemo: TFsortdemo
  Left = 708
  Height = 302
  Top = 273
  Width = 383
  Caption = 'sortdemo'
  ClientHeight = 302
  ClientWidth = 383
  LCLVersion = '2.2.0.4'
  object BtnLoad: TButton
    Left = 0
    Height = 25
    Top = 0
    Width = 75
    Caption = 'Load'
    OnClick = BtnLoadClick
    TabOrder = 1
  end
  object BtnSort: TButton
    Left = 8
    Height = 25
    Top = 32
    Width = 75
    Caption = 'Sort'
    OnClick = BtnSortClick
    TabOrder = 0
  end
  object ws: TsWorksheetGrid
    Left = 120
    Height = 240
    Top = 16
    Width = 200
    FrozenCols = 0
    FrozenRows = 0
    PageBreakPen.Color = clBlue
    PageBreakPen.Style = psDash
    ReadFormulas = False
    WorkbookSource = wb
    AutoAdvance = aaDown
    DefaultColWidth = 64
    DefaultRowHeight = 24
    TabOrder = 2
  end
  object wb: TsWorkbookSource
    AutoDetectFormat = False
    FileFormat = sfUser
    Options = []
    Left = 24
    Top = 88
  end
end
le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
unit usortdemo;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics,
  ExtCtrls, Menus, ComCtrls, StdCtrls,
  fpspreadsheetctrls,
  fpsTypes,
  fpsutils,
  fpspreadsheet,
  fpspreadsheetgrid;
 
type
  { TFsortdemo }
  TFsortdemo = class(TForm)
    BtnLoad: TButton;
    BtnSort: TButton;
    ws: TsWorksheetGrid;
    wb: TsWorkbookSource;
  procedure BtnLoadClick(Sender: TObject);
  procedure BtnSortClick(Sender: TObject);
 
  private
  public
end;
 
var
  Fsortdemo: TFsortdemo;
 
implementation
 
{$R *.lfm}
{ TFsortdemo }
 
var
  sortParams: TsSortParams;
 
procedure TFsortdemo.BtnLoadClick(Sender: TObject);
var
  str1, str2, str3, str4, str5, str6 : string;
 
begin
  str1 := 'A Huit';
  str2 := 'ACinq';
  str3 := 'ANeuf';
  str4 := 'xA Huit';
  str5 := 'xACinq';
  str6 := 'xANeuf';
 
  // chargement manuel du Worksheet
  wb.Worksheet.Clear;
  wb.Worksheet.WriteText(0, 0, UTF8toANSI(str1)); // str1 := 'A Huit';
  wb.Worksheet.WriteText(1, 0, UTF8toANSI(str2)); // str2 := 'ACinq';
  wb.Worksheet.WriteText(2, 0, UTF8toANSI(str3)); // str3 := 'ANeuf';
  wb.Worksheet.WriteText(3, 0, str4);             // str4 := 'xA Huit';
  wb.Worksheet.WriteText(4, 0, str5);             // str5 := 'xACinq';
  wb.Worksheet.WriteText(5, 0, str6);             // str6 := 'xANeuf';
end;
 
procedure TFsortdemo.BtnSortClick(Sender: TObject);
begin
  sortParams := InitSortParams(true, 1);              // Col sort, Number of sort (cols or rows)
  sortParams.Keys[0].ColRowIndex := 0;                // ColRowIndex    Index of the sorted column or row
  sortParams.Keys[0].Options := []; //     TsSortOption = (ssoDescending, ssoCaseInsensitive, ssoAlphaBeforeNum)
  wb.Worksheet.Sort(sortParams, 0, 0, wb.worksheet.GetLastRowIndex, wb.worksheet.GetLastColIndex);
end;
 
end.
Image après le chargement des données

Nom : Avant le tri.jpg
Affichages : 521
Taille : 18,9 Ko

Image après le tri

Nom : Après le tri.jpg
Affichages : 510
Taille : 19,8 Ko


Pour moi la chaîne A Huit est inférieure à la chaîne ACinq à cause de l'espace en 2ème position qui est inférieur au C de ACinq

J'ai dû rater quelque chose mais quoi ?
Merci de m'aider.