Bläddra i källkod

133 function is not AllowDarkModeForWindow Windows 7 - causes crash

See 71340fa744

Source commit: b22b99266fdfd98f75c0768967f442e8a293dc8a
Martin Prikryl 6 år sedan
förälder
incheckning
67acf979a0
1 ändrade filer med 9 tillägg och 2 borttagningar
  1. 9 2
      source/windows/VCLCommon.cpp

+ 9 - 2
source/windows/VCLCommon.cpp

@@ -2723,11 +2723,18 @@ TPanel * __fastcall CreateBlankPanel(TComponent * Owner)
 }
 //---------------------------------------------------------------------------
 typedef bool (WINAPI * AllowDarkModeForWindowProc)(HWND Handle, bool Allow);
-AllowDarkModeForWindowProc AAllowDarkModeForWindow;
+AllowDarkModeForWindowProc AAllowDarkModeForWindow = NULL;
 bool AllowDarkModeForWindowLoaded = false;
+bool AllowDarkModeCalledWithTrue = false;
 void AllowDarkModeForWindow(TWinControl * Control, bool Allow)
 {
-  if (!AllowDarkModeForWindowLoaded)
+  if (Allow)
+  {
+    // Do not try to call AllowDarkModeForWindow with false, unless we ever called it with true, so that,
+    // if function changes it ID, we can prevent its call by turning off dark mode.
+    AllowDarkModeCalledWithTrue = true;
+  }
+  if (AllowDarkModeCalledWithTrue && (GetWindowsBuild() >= 17763) && !AllowDarkModeForWindowLoaded)
   {
     HMODULE UxThemeLib = GetModuleHandle(L"UxTheme");
     if (DebugAlwaysTrue(UxThemeLib != NULL))