De la ayuda sobre el tipo TStringListSortCompare
función:
Índice1 y Index2 son los índices de los elementos de la lista para comparar. Los rendimientos de devolución de llamada:
- un valor inferior a 0 si la cadena identificado por Índice1 viene antes de la cadena identificado por Index2
- 0 si las dos cadenas son equivalentes
- un valor mayor que 0 si la cadena con Index1 viene después de la cadena identificada por Index2.
Así que si se resta de su orden de encargo del segundo elemento de la orden de encargo de la primera, a continuación, los artículos serán ordenados como usted desee.
const
Order: array[0..6] of String = ('B', 'C', 'A', 'D', 'G', 'F', 'E');
function GetStringOrder(const S: String; CaseSensitive: Boolean): Integer;
begin
for Result := 0 to Length(Order) - 1 do
if (CaseSensitive and (CompareStr(Order[Result], S) = 0)) or
(not CaseSensitive and (CompareText(Order[Result], S) = 0)) then
Exit;
Result := Length(Order);
end;
function MyCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := GetStringOrder(List[Index1], List.CaseSensitive) -
GetStringOrder(List[Index2], List.CaseSensitive);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
List: TStringList;
begin
List := TStringList.Create;
try
List.CommaText := 'A,G,a,C,B,b,F,a,B,C,c,D,d,E,D,F,G,C,A,G,d,e,f,g';
List.CaseSensitive := True;
List.CustomSort(MyCompareStrings);
ListBox1.Items.Assign(List);
finally
List.Free;
end;
end;
Thak you! ¡Me das la luz que necesito! – Dirtycoder