Odczyt aktualnie ustawionego przez system koloru formy

0

Witam,
Jak można odczytać AKTUALNY (ustawiony przez windows) kolor tła formy czyli kolor na którym wyświetlony jest np. Caption.
interesuje mnie jakiekolwiek działające rozwiązanie (windows 10)

2

Jeśli używasz systemowego koloru formularza to skorzystaj z systemowej funkcji Windows.GetSysColor, podając w argumencie stałą, określającą indeks koloru.

Dla przykładu, formularz ma ustawiony kolor clBtnFace, więc aby go odczytać, wystarczy poniższa linijka:

var
  LColor: TColor;
begin
  LColor := Windows.GetSysColor(COLOR_BTNFACE);

Jeśli interesuje Cię inny kolor to skorzystaj z innej stałej dla parametru.

0

Niestety to tylko teoria. Zmiany kolorów przez użytkownika Windows nie skutkują zmianą odczytu koloru metodą GetSysColor

0

Ehh...

furious programming napisał(a):

Jeśli interesuje Cię inny kolor to skorzystaj z innej stałej dla parametru.

Spróbuj z inną stałą, np. COLOR_WINDOW.

No i sprawdź, czy komunikat WM_THEMECHANGED w Twojej aplikacji jest prawidłowo obsługiwany – czy wymusza przemalowanie kontrolek i tym samym ponowne wywołanie funkcji GetSysColor w celu określenia aktualnego koloru okien.

0

Jak można odczytać AKTUALNY (ustawiony przez windows) kolor tła formy czyli kolor na którym wyświetlony jest np. Caption.

Zaraz. Caption formy?

Caption formy nie jest na tle formy, tylko na belce tytułowej.
Sprecyzuj o co dokładnie chodzi.

0

Tych stałych jest trochę, więc ma w czym wybierać. Po to podałem link, aby sobie wybrał to co mu odpowiada.

0

Jeśli chodzi o kolor belki tytułowej, jest kilka różnych sposobów jego pobrania i niestety trzeba oprogramować wszystkie, jeśli program ma prawidłowo działać na różnych wersjach Windowsa.

  1. kolor ze skórki klasycznej znanej z Windows 9x (a właściwie są to dwa kolory bo może być gradient)
  2. kolor belki pobrany ze skórki Luna (XP) i Aero Basic (Vista, 7)
  3. kolor ze skórki Aero (Vista+)

Jeśli program ma działać na Windows 7, trzeba oprogramować wszystkie trzy sposoby, bo na Win7 może być włączona skórka Aero, Aero Basic albo klasyczna.
Jeśli na Windows 8+ wystarczy tylko trzeci sposób, bo Aero jest co do zasady (prawie) zawsze aktywne.

Windows 10 (przynajmniej niektóre buildy) na dodatek zdaje się mieć buga i czasami zwraca kolor niebieski nawet jak widać jak wół że powinien być inny.

0

Dokładnie chcę uzyskać to co na rysunku
screenshot-20170724154953.png

0

To co wskazałeś strzałką to nie jest kolor zielony, a szary…

Poza tym, jaki to komponent? To jest panel, czy przycisk? Ciężko poznać.

1

Jeśli chodzi o pasek tytułowy – czyli Title Bar – to bierz pod uwagę poniższe stałe dla funkcji GetSysColor:

  • COLOR_ACTIVECAPTION
  • COLOR_INACTIVECAPTION
  • COLOR_GRADIENTACTIVECAPTION
  • COLOR_GRADIENTINACTIVECAPTION
1

Od Vista jeżeli włączone są kompozycje pulpitu to raczej funkcja DwmGetColorizationColor jeżeli chodzi o okno a o belkę tytułową to chyba nieudokumentowana DwmGetColorizationParameters w każdym razie coś w temacie https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540(v=vs.85).aspx
A dla Delphi ściąga https://theroadtodelphi.com/2011/05/05/changing-the-glass-composition-color-dwm-using-delphi/

0

Chcę (muszę) uzyskać formatkę jak na rysunku (niebieska). Wykorzystałem ustawienie formy GlassFrame (Enabled, left.. itd) ale otrzymuję formę jak na rysunku (zielony, lepiej widać). Na czerwono zaznaczyłem miejsca gdzie ramka różni się kolorystycznie od paska tytułu i nie wiem jak to skorygować
screenshot-20170726102335.png

0

Odcienie zieleni różnią się – widać to gołym okiem. Do kompletu poprzednio podanych stałych, dorzuciłbym jeszcze COLOR_ACTIVEBORDER dla ramki aktywnej i COLOR_INACTIVEBORDER, dla nieaktywnej. Jest jeszcze COLOR_WINDOWFRAME, choć nie wiem za co odpowiada.

Czy Ty sam programowo malujesz całe to okno, łącznie z belką tytułową, obramowaniem i zawartością?

1 użytkowników online, w tym zalogowanych: 0, gości: 1