Du benötigst einen Container, bei dem Du nach einem TColor (=Cardinal)-Schlüssel suchen kannst. Du kannst eine TStringList bzw. eine THashedStringlist verwenden. Der Schlüssel ist dann IntToStr (MyColor). Die Objects-Eigenschaft misbrauchst du als Zähler. Anschließend sortierst Du nach Integer (Objects[*]) und -bupps- hast Du deine Häufigkeitsverteilung.
Delphi-Quellcode:
Procedure CountColor (aColor : TColor; aList : TStringList);
Var
sKey : String;
i : Integer;
Begin
sKey := IntToStr (aColor);
i := aList.IndexOf (sKey);
If i=-1 Then
i := aList.Add (sKey, Pointer (1))
Else
aList.Objects[i] := Pointer (Integer (aList.Objects[i]) + 1);
End;
function CompareObjects (List: TStringList; Index1, Index2: Integer): Integer;
Begin
Result := Integer (List.Objects[Index2]) - Integer(List.Objects[Index1]);
End;
Procedure SortByIntegerObject (aList : TStringList);
Begin
aList.CustomSort (CompareObjects);
End;