procedure TForm1.Button1Click(Sender: TObject);
var St :TStringList;
begin
   St :=TStringList.Create;
  {Ascii编码:
   c 99
   C 67
   W 87
   AWSAccessKeyId 和Action,
   大小写不敏感,是Action前面,
   大小写敏感,  是AWSAccessKeyId前面。}
   
   St.Add('AWSAccessKeyId');
   St.Add('Action');   St.CaseSensitive :=True; //true或false,比较结果,都是大小写不敏感,是否delphi的bug。
   //St.Sorted :=false;
   St.Sort;
   if 'AWSAccessKeyId' >'Action' then
        ShowMessage('AWSAccessKeyId 大')
   else ShowMessage('Action 大');
   ShowMessage(St.Strings[0] +' ' +St.Strings[1]);   //显示为Action AWSAccessKeyId,说明大小写不敏感的。
   //而我要的是大小写敏感的。
end;

解决方案 »

  1.   

    tstringlist.sort 是个虚函数,可以自己重写实现自己想要的排序方式,具体看tstringlist的源码
      

  2.   

      最近用delphi开发和各个网站的api接口。  越来越明白delphi工具,是一个核心类库设计较好,
      语言自带外围类功能较弱,种类不是很全的。  用C#,是核心设计好,外围类功能强,种类全面。
      
      
      

  3.   

    看Sort的帮助:
    Sort uses AnsiCompareStr to sort the strings when CaseSensitive is true and AnsiCompareText when CaseSensitive is false. AnsiCompareStr的帮助:
    Most locales consider lowercase characters to be less than the corresponding uppercase characters.  This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters.  Thus, setting S1 to 'a' and S2 to 'A' causees AnsiCompareStr to return a value less than zero, while CompareStr, with the same arguments, returns a value greater than zero.解决办法是自己从TStringList派生一个类,并覆盖CompareStrings方法(把AnsiCompareStr换成CompareString):
    type
      TMyStringList = class(TStringList)
      protected
        function CompareStrings(const S1, S2: string): Integer; override;
      end;{ TMyStringList }function TMyStringList.CompareStrings(const S1, S2: string): Integer;
    begin
      if CaseSensitive then
        Result := CompareStr(S1, S2)
      else
        Result := CompareText(S1, S2);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var St :TStringList;
    begin
       St :=TMyStringList.Create;
       St.Add('AWSAccessKeyId');
       St.Add('Action');
       st.CaseSensitive := True;
       St.Sort;    showmessage(st.Text);
        st.free;
    end;
      

  4.   

    字符串比较依赖于windows api:CompareStringA/CompareStringW。这个API的所有逻辑我测试了很多次,没有测试出来。但是可以肯定的是,大写字母是大于小写字母的。
      

  5.   

    Delphi7在这一点上有点妖,如果用了CaseSensitive,它转而调用了AnsiCompareStr
    function TStringList.CompareStrings(const S1, S2: string): Integer;
    begin
      if CaseSensitive then
        Result := AnsiCompareStr(S1, S2)
      else
        Result := AnsiCompareText(S1, S2);
    end;
    如果你看一下AnsiCompareStr的帮助
    Note: Most locales consider lowercase characters to be less than the corresponding uppercase characters.  This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters.  Thus, setting S1 to 'a' and S2 to 'A' causees AnsiCompareStr to return a value less than zero, while CompareStr, with the same arguments, returns a value greater than zero.
    它说了:因为很多淫认为大写的就是大,小写的就是小,拉个ascii与一般淫的常识不一致,所以如果你要求排序时区分大小写的话,俺就把小写的a淫为比大写的A小,所以blabla.....