Da gibt es sicher irgendwo eine Formel, womit man berechnen kann, ob clHighlight eher hell oder dunkel ist und entsprechend clGreen bzw. clLime nehmen. (Ein kleiner Versuch meinerseits scheiterte aber eben, weil hohe RBG Einzelwerte nicht automatisch eine hellere Farbe ergeben, aber immerhin annähernd).
Alternativ einfach die Farbe des Balkens in dem Feld auf Grün oder Rot und den Text weiß lassen. keine Ahnung ob das dann gut aussieht.
***
Ist vielleicht kein guter Vorschlag, aber evtl. die Logik des Ablaufes ändern. Deine Felder kennen ja 3 Zustände: normal, rot & grün. Das vielleicht zuerst ermitteln und dann erst state abfragen.
Delphi-Quellcode:
if vsSelected in State then begin
case
normal:
gruen:
rot:
end;
end else begin
case
normal:
gruen:
rot:
end;
end;