Dalla aiuto sul tipo TStringListSortCompare
funzione di:
Index1 e Index2 sono gli indici delle voci di elenco da confrontare. il callback restituisce:
- un valore inferiore a 0 se la stringa identificata da Index1 viene prima la stringa identificata da Indice2
- 0 se le due stringhe sono equivalenti
- un valore maggiore di 0 se la stringa con Index1 viene dopo la stringa identificata da Index2.
Quindi, se si sottrae il vostro ordine personalizzato del secondo elemento dalla ordine personalizzato del primo, poi gli articoli saranno ordinati come si desidera.
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! Tu mi dai la luce di cui ho bisogno! – Dirtycoder