Witam serdecznie, piszę program, w którym ręcznie rysuję menu główne i popupy przez OwnerDraw. Moja aplikacja musi rozróżniać, jaki jest aktualny kolor clMenuHighlight - czy to jest niebieski, czy oliwkowy, czy srebrny. Jednak jak przyjrzeć się bliżej, systemowe kolory typu clMenu, clMenuHighlight czy clMenuText nie są tak naprawdę kolorami, a czymść w rodzaju masek.

Jeśli pobiorę np. kolor clMenuHighlight (niebieski) do zmiennej i zapiszę ją do pliku (liczba ujemna), po ponownym uruchomieniu programu wczytam ten kolor (już czarny, a liczba odpowiadająca kolorowi już dodatnia) i ustawię go np. jako kolor formularza, to jest zupełnie inny, niż w poprzednim uruchomieniu (był niebieski, jest czarny).

Po pobraniu tego koloru z systemu, muszę go zapisać do dwóch zmiennych: oryginalny i nieco jaśniejszy.

Mam procedurkę, która pobiera kolor:

procedure GetColors(var Original, Light: TColor);
var
clTemp: TColor;
begin
clTemp := clMenuHighlight;

//dalsze instrukcje
end;

Co teraz mam zrobić? Nie wiem czy rozkładać na czynniki ten kolor i tam próbować coś tym robić, czy są inne sposoby.

W każdym razie ręcznie pobrałem przez robienie screenów kolor clMenuHighlight w systemowym stylu Luna, kolor domyślny (niebieski). Tam patrząc w oknie dialogowym do kolorów na składowe koloru, wiem, jakie mają wartości RGB a także odcień, nasycenie i jaskrawość. Żeby rozjaśnić ten kolor zwiększam mu wartość jaskrawości o 20.

Jak to teraz zrobić programowo?

Czy jest sposób na to, żeby kolor clMenuHighlight bez względu na to jaki przechowuje kolor rozłożyć na te sześć składowych i tam dalej dokonywać modyfikacji?

Bardzo proszę o pomoc.
Pozdrawiam.