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.