使用したDelphi: 2007
こんにちは、
いくつかの列があるリストビューがあります。特定の列を1つ並べ替えたい。アイテムは数字でも文字でもかまいません。
基本的に、順序は次のようになります:1-> 99、A-> Z、AA-> ZZ、AAA->ZZZ。インターネットでCustomSortコードを見つけて、それを変更しました。結果は次のとおりです(コードは大きくなりますが、重要なものだけを入れています):
function CustomSortProc(Item1, Item2: TListItem; SortColumn: Integer): Integer; stdcall;
var
s1, s2: string;
i1, i2: Integer;
r1, r2: Boolean;
function IsValidNumber(AString : string; var AInteger : Integer): Boolean;
var
Code: Integer;
begin
Val(AString, AInteger, Code);
Result := (Code = 0);
end;
function CompareNumeric(AInt1, AInt2: Integer): Integer;
begin
if AInt1 > AInt2 then Result := 1 else
if AInt1 = AInt2 then Result := 0 else Result := -1;
end;
begin
Result := 0;
if (Item1 = nil) or (Item2 = nil) then Exit;
r1 := IsValidNumber(s1, i1);
r2 := IsValidNumber(s2, i2);
Result := ord(r1 or r2);
if Result <> 0 then Result := CompareNumeric(i1, i2) else
begin
Result := Length(s1) - Length(s2);
if Result = 0 then Result := lstrcmp(PChar(s1), PChar(s2));
end;
end;
列の並べ替え方法は次のとおりです。
つまり、文字と数字は正しくソートされています。ただし、文字の前にすべての数字を入れることはできません。簡単なことだと思いますが、一生理解できません。
どうもありがとうございます。