Hmm..
Ich würde mir ne StringList nehmen und dort nach dem Name/Value Prinzip Einträge erzeugen.
Die Liste wird beim OnAfterOpen des Querys gelöscht.
Beim OnDrawCell wird nun in der Liste nach einem 'Name' mit der ID gesucht (StringList.NameOf()).
- Wenn Nicht vorhanden, dann ein Add mit ID=NewColor hinzufügen.
- Wenn Vorhanden, dann die Color (StringList.Value[]) der ID verwenden.
Wenn nun gescrollt wird, wird immer die passende Farbe zur ID verwendet, egal ob rauf oder runter.
Dann ist auch die Sortierung der Datenmenge egal, da die Farbe zur ID des Datensatzes geholt wird.
Wenn Du die StringList auf Sorted setzt, wird auch das Suchen darin schneller.
(Nur so eine Idee zur Umsetzung
)