Delphi排序TListView问题

时间:2010-01-17 00:35:24

标签: delphi listview

我正在使用以下代码:http://www.swissdelphicenter.ch/torry/showcode.php?id=1103 对我的TListView进行排序,除了带小数的数字之外,它对所有内容都有效。

所以我自己尝试这样做,并创建了一个名为的新自定义排序:

cssFloat

创建了一个新功能


function CompareFloat(AInt1, AInt2: extended): Integer;
  begin
    if AInt1 > AInt2 then Result := 1
    else
      if AInt1 = AInt2 then Result := 0
    else
      Result := -1;
  end;
添加了case语句,告诉它列的类型。

             cssFloat  : begin
                  Result := CompareFloat(i2, i1);
              end;

我更改了列单击事件,以便为列选择正确的类型。

             cssFloat  : begin
                  Result := CompareFloat(i2, i1);
              end;

并且ListView排序类型当前设置为stBoth。

它没有正确排序。关于如何解决这个问题的想法?

谢谢

-Brad

2 个答案:

答案 0 :(得分:0)

我修好了......经过3个小时的挣扎......不明白为什么......我终于看到了光.. CompareFloat问两个整数是否大于或小于彼此。


cssFloat  : begin
                    r1 := IsValidFloat(s1, e1);
                    r2 := IsValidFloat(s2, e2);
                    Result := ord(r1 or r2);
                    if Result <> 0 then
                      Result := CompareFloat(e2, e1);
                  end;
(从EFG的Delphi网站复制和修改)

FUNCTION isValidFloat(CONST s:  STRING; var e:extended):  BOOLEAN;
  BEGIN
  RESULT := TRUE;
  TRY
   e:= StrToFloat(s)
  EXCEPT
    ON EConvertError DO begin e:=0; RESULT := FALSE; end;

END END {isValidFloat};

答案 1 :(得分:0)

虽然我不知道你遇到的问题可能对你有用......

  function CompareFloat(AStr1, AStr2: string): Integer;
  const
    _MAGIC = -1; //or ANY number IMPOSSIBLE to reach

  var
    nInt1, nInt2: extended;

  begin
    nInt1:=StrToFloatDef(AStr1, _MAGIC);
    nInt2:=StrToFloatDef(AStr2, _MAGIC);
    if nInt1 > nInt2 then Result := 1
    else
      if nInt1 = nInt2 then Result := 0
    else
      Result := -1;
  end;

..和另一个片段(也许更好):

function CompareFloat(aInt1, aInt2: extended): integer;
begin
  Result:=CompareValue(aInt1, aInt2); // :-) (see the Math unit) - also you can add a tolerance here (see the 'Epsilon' parameter)
end;

除了可能导致问题的舍入外,您还可以看到字符串和数字之间转换的格式设置(您知道,小数点,千位分隔符aso。) - 请参阅StringToFloat函数中的TFormatSettings结构。 (有两个 - 超载)。

HTH,