浏览代码

Merge branch 'darkstatusbar'

Martijn Laan 2 月之前
父节点
当前提交
d61a744dfc
共有 4 个文件被更改,包括 419 次插入17 次删除
  1. 294 1
      Projects/Src/IDE.ImagesModule.dfm
  2. 2 1
      Projects/Src/IDE.ImagesModule.pas
  3. 122 15
      Projects/Src/IDE.MainForm.pas
  4. 1 0
      whatsnew.htm

+ 294 - 1
Projects/Src/IDE.ImagesModule.dfm

@@ -1,7 +1,7 @@
 object ImagesModule: TImagesModule
   Height = 368
   Width = 656
-  object BuildImageList: TImageList
+  object LightBuildImageList: TImageList
     ColorDepth = cd32Bit
     Height = 17
     Left = 96
@@ -294,6 +294,299 @@ object ImagesModule: TImagesModule
       0000000000000000000000000000000000000000000000000000000000000000
       00000000000000000000000000000000000000000000}
   end
+  object DarkBuildImageList: TImageList
+    ColorDepth = cd32Bit
+    Height = 17
+    Left = 248
+    Top = 288
+    Bitmap = {
+      494C010104000800040010001100FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
+      0000000000003600000028000000400000002200000001002000000000000022
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900090909000909090009090900BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
+      BF00BFBFBF00BFBFBF00BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900BFBFBF00BFBFBF000909090009090900BFBFBF00BFBFBF000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF0009090900BFBF
+      BF00BFBFBF000909090009090900BFBFBF00BFBFBF000909090009090900BFBF
+      BF00BFBFBF0009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090009090900090909002B2B2B009D9D9D009D9D9D002B2B2B00090909000909
+      09000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      090079797900BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007979
+      79000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      09009D9D9D002B2B2B0009090900BFBFBF00BFBFBF00090909002B2B2B009D9D
+      9D000909090009090900BFBFBF000909090009090900BFBFBF00090909000909
+      0900090909000909090009090900BFBFBF00BFBFBF0009090900090909000909
+      09000909090009090900BFBFBF00090909000909090009090900090909000909
+      0900090909004C4C4C00B4B4B400BFBFBF00BFBFBF00B4B4B4004C4C4C000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900BFBFBF00BFBFBF0063636300BFBFBF00BFBFBF0063636300BFBFBF00BFBF
+      BF00090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900BFBFBF00BFBFBF0009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000909090009090900090909000909
+      0900090909000909090009090900090909000000000000000000000000000909
+      090079797900BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007979
+      7900090909000000000000000000000000000000000000000000000000000909
+      09009D9D9D002B2B2B0009090900BFBFBF00BFBFBF00090909002B2B2B009D9D
+      9D00090909000000000000000000000000000000000000000000000000000909
+      0900090909000000000009090900BFBFBF00BFBFBF0009090900000000000909
+      0900090909000000000000000000000000000000000000000000000000000000
+      000009090900090909002B2B2B009D9D9D009D9D9D002B2B2B00090909000909
+      0900000000000000000000000000000000000000000000000000000000000909
+      0900BFBFBF00BFBFBF0063636300BFBFBF00BFBFBF0063636300BFBFBF00BFBF
+      BF00090909000000000000000000000000000000000000000000000000000909
+      0900090909000909090009090900BFBFBF00BFBFBF0009090900090909000909
+      0900090909000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000909
+      0900090909004C4C4C00B4B4B400BFBFBF00BFBFBF00B4B4B4004C4C4C000909
+      0900090909000000000000000000000000000000000000000000000000000909
+      09009D9D9D002B2B2B0009090900BFBFBF00BFBFBF00090909002B2B2B009D9D
+      9D00090909000000000000000000000000000000000000000000000000000909
+      0900090909000000000009090900BFBFBF00BFBFBF0009090900000000000909
+      0900090909000000000000000000000000000000000000000000000000000000
+      000009090900090909002B2B2B009D9D9D009D9D9D002B2B2B00090909000909
+      0900000000000000000000000000000000000000000000000000000000000909
+      090079797900BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007979
+      7900090909000000000000000000000000000000000000000000000000000909
+      0900090909000909090009090900BFBFBF00BFBFBF0009090900090909000909
+      0900090909000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000909
+      0900090909004C4C4C00B4B4B400BFBFBF00BFBFBF00B4B4B4004C4C4C000909
+      0900090909000000000000000000000000000000000000000000000000000909
+      0900BFBFBF00BFBFBF0063636300BFBFBF00BFBFBF0063636300BFBFBF00BFBF
+      BF00090909000000000000000000000000000000000000000000000000000909
+      0900090909000000000009090900BFBFBF00BFBFBF0009090900000000000909
+      0900090909000000000000000000000000000000000000000000000000000000
+      000009090900090909002B2B2B009D9D9D009D9D9D002B2B2B00090909000909
+      0900000000000000000000000000000000000000000000000000000000000909
+      090079797900BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007979
+      7900090909000000000000000000000000000000000000000000000000000909
+      09009D9D9D002B2B2B0009090900BFBFBF00BFBFBF00090909002B2B2B009D9D
+      9D00090909000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000909
+      0900090909004C4C4C00B4B4B400BFBFBF00BFBFBF00B4B4B4004C4C4C000909
+      0900090909000000000000000000000000000000000000000000000000000909
+      0900BFBFBF00BFBFBF0063636300BFBFBF00BFBFBF0063636300BFBFBF00BFBF
+      BF00090909000000000000000000000000000000000000000000000000000909
+      0900090909000909090009090900BFBFBF00BFBFBF0009090900090909000909
+      090009090900000000000000000000000000424D3E000000000000003E000000
+      2800000040000000220000000100010000000000100100000000000000000000
+      000000000000000000000000FFFFFF0000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000E007E007E427F00FE007E007FFFFE007
+      E007E427F00FE007E007FFFFE007E007E427F00FE007E007FFFFE007E007E007
+      00000000000000000000000000000000000000000000}
+  end
   object LightToolBarImageCollection: TImageCollection
     Images = <
       item

+ 2 - 1
Projects/Src/IDE.ImagesModule.pas

@@ -8,7 +8,8 @@ uses
 
 type
   TImagesModule = class(TDataModule)
-    BuildImageList: TImageList;
+    LightBuildImageList: TImageList;
+    DarkBuildImageList: TImageList;
     LightToolBarImageCollection: TImageCollection;
     DarkToolBarImageCollection: TImageCollection;
     LightMarkersAndACImageCollection: TImageCollection;

+ 122 - 15
Projects/Src/IDE.MainForm.pas

@@ -479,6 +479,7 @@ type
     FProgressThemeData: HTHEME;
     FMenuThemeData: HTHEME;
     FToolbarThemeData: HTHEME;
+    FStatusBarThemeData: HTHEME;
     FMenuDarkBackgroundBrush: TBrush;
     FMenuDarkHotOrSelectedBrush: TBrush;
     FDebugLogListTimestampsWidth: Integer;
@@ -501,6 +502,7 @@ type
     FCompileShortCut2: TShortCut;
     FCallTipState: TCallTipState;
     FUpdatePanelMessages: TUpdatePanelMessages;
+    FBuildImageList: TImageList;
     function AnyMemoHasBreakPoint: Boolean;
     class procedure AppOnException(Sender: TObject; E: Exception);
     procedure AppOnActivate(Sender: TObject);
@@ -592,6 +594,8 @@ type
     procedure SetStatusPanelVisible(const AVisible: Boolean);
     procedure SetStepLine(const AMemo: TIDEScintFileEdit; ALine: Integer);
     procedure ShowOpenMainFileDialog(const Examples: Boolean);
+    procedure StatusBarCanvasDrawPanel(Canvas: TCanvas;
+      Panel: TStatusPanel; const Rect: TRect);
     procedure StatusMessage(const Kind: TStatusMessageKind; const S: String);
     function StoreAndTestLastFindOptions(Sender: TObject): Boolean;
     function TestLastFindOptions: Boolean;
@@ -810,6 +814,92 @@ begin
   Result := Memo;
 end;
 
+function DarkStatusBarSubclassProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall;
+const
+  { See TStatusBarStyleHook.Paint }
+  AlignStyles: array [TAlignment] of Integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
+  cGripSize = 17;
+begin
+  case uMsg of
+    WM_ERASEBKGND:
+      begin
+        const MainForm = TMainForm(dwRefData);
+        if MainForm.FTheme.Dark then begin
+          { See StatusBarStyleHook.WMEraseBkgnd }
+          Exit(1);
+        end;
+      end;
+    WM_PAINT, WM_PRINTCLIENT:
+      begin
+        const MainForm = TMainForm(dwRefData);
+        if MainForm.FTheme.Dark then begin
+          var PaintStruct: TPaintStruct;
+          const Canvas = TCanvas.Create;
+          try
+            if uMsg = WM_PAINT then
+              Canvas.Handle := BeginPaint(hWnd, PaintStruct)
+            else
+              Canvas.Handle := wParam;
+
+            const Control = MainForm.StatusBar;
+            Canvas.Font := Control.Font;
+            Canvas.Font.Color := MainForm.FTheme.Colors[tcFore];
+
+            { See TStatusBarStyleHook.Paint }
+
+            Canvas.Brush.Color := $171717; { Same as themed scrollbar drawn by Windows 11 }
+            Canvas.FillRect(Rect(0, 0, Control.Width, Control.Height));
+
+            const Count = Control.Panels.Count;
+            for var I := 0 to Count-1 do begin
+              var R := Default(TRect);
+              SendMessage(hWnd, SB_GETRECT, I, IntPtr(@R));
+              if IsRectEmpty(R) then
+                Continue;
+              var R1 := R;
+              if I = Count - 1 then
+                R1.Right := Control.ClientWidth + 10;
+              Canvas.FillRect(R1);
+              InflateRect(R, -1, -1);
+              var Flags := Control.DrawTextBiDiModeFlags(AlignStyles[Control.Panels[I].Alignment]);
+              Flags := Flags + DT_VCENTER;
+              var LText: String;
+              SetLength(LText, Word(SendMessage(hWnd, SB_GETTEXTLENGTH, I, 0)));
+              if Length(LText) > 0 then begin { Always False at the moment }
+                var Res := SendMessage(hWnd, SB_GETTEXT, I, IntPtr(@LText[1]));
+                if (Res and SBT_OWNERDRAW = 0) then
+                  DrawText(Canvas.Handle, LText, Length(LText), R, Flags)
+                else
+                  MainForm.StatusBarCanvasDrawPanel(Canvas, Control.Panels[I], R);
+              end else begin
+                if Control.Panels[I].Style <> psOwnerDraw then
+                  DrawText(Canvas.handle, Control.Panels[I].Text, Length(Control.Panels[I].Text), R, Flags)
+                else
+                  MainForm.StatusBarCanvasDrawPanel(Canvas, Control.Panels[I], R);
+              end;
+            end;
+
+            if not IsZoomed(MainForm.Handle) and (MainForm.FStatusBarThemeData <> 0) then begin
+              var R1 := Control.ClientRect;
+              R1.Left := R1.Right - MainForm.ToCurrentPPI(cGripSize);
+              R1.Top := R1.Bottom - MainForm.ToCurrentPPI(cGripSize);
+              DrawThemeBackground(MainForm.FStatusBarThemeData, Canvas.Handle, SP_GRIPPER, 0, R1, nil);
+            end;
+          finally
+            Canvas.Free;
+          end;
+          if uMsg = WM_PAINT then
+            EndPaint(hWnd, PaintStruct);
+          Exit(0);
+        end;
+      end;
+    WM_NCDESTROY:
+      RemoveWindowSubclass(hWnd, @DarkStatusBarSubclassProc, 0);
+  end;
+
+  Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
+end;
+
 constructor TMainForm.Create(AOwner: TComponent);
 
   procedure CheckUpdatePanelMessage(const Ini: TConfigIniFile; const ConfigIdent: String;
@@ -1064,6 +1154,8 @@ begin
   ThemedMarkersAndACVirtualImageList.AutoFill := True;
 
   UpdateThemeData(True);
+  
+  SetWindowSubclass(StatusBar.Handle, @DarkStatusBarSubclassProc, 0, DWORD_PTR(Self));
 
   FMenuBitmaps := TMenuBitmaps.Create;
   FMenuBitmapsSize.cx := 0;
@@ -1227,6 +1319,7 @@ begin
   UpdateMarginsAndSquigglyAndCaretWidths;
   UpdateOutputTabSetListsItemHeightAndDebugTimeWidth;
   UpdateStatusPanelHeight(StatusPanel.Height);
+  SetWindowSubclass(StatusBar.Handle, @DarkStatusBarSubclassProc, 0, DWORD_PTR(Self));
 end;
 
 procedure TMainForm.FormCloseQuery(Sender: TObject;
@@ -6476,11 +6569,14 @@ begin
   if FTheme.Dark then begin
     ThemedToolbarVirtualImageList.ImageCollection := ImagesModule.DarkToolBarImageCollection;
     ThemedMarkersAndACVirtualImageList.ImageCollection := ImagesModule.DarkMarkersAndACImageCollection;
+    FBuildImageList := ImagesModule.DarkBuildImageList;
   end else begin
     ThemedToolbarVirtualImageList.ImageCollection := ImagesModule.LightToolBarImageCollection;
     ThemedMarkersAndACVirtualImageList.ImageCollection := ImagesModule.LightMarkersAndACImageCollection;
+    FBuildImageList := ImagesModule.LightBuildImageList;
   end;
 
+  UpdateThemeData(True);
   UpdateBevel1Visibility;
   UpdateMarginsAndAutoCompleteIcons;
 
@@ -6529,11 +6625,16 @@ begin
   CloseThemeDataIfNeeded(FProgressThemeData);
   CloseThemeDataIfNeeded(FMenuThemeData);
   CloseThemeDataIfNeeded(FToolbarThemeData);
+  CloseThemeDataIfNeeded(FStatusBarThemeData);
 
   if Open and UseThemes then begin
     FProgressThemeData := OpenThemeData(Handle, 'Progress');
     FMenuThemeData := OpenThemeData(Handle, 'Menu');
-    FToolbarThemeData := OpenThemeData(Handle, 'Toolbar');
+    if FTheme.Dark then
+      FToolbarThemeData := OpenThemeData(Handle, 'DarkMode::Toolbar');
+    if FToolbarThemeData = 0 then
+      FToolbarThemeData := OpenThemeData(Handle, 'Toolbar');
+    FStatusBarThemeData := OpenThemeData(Handle, 'Status');
   end;
 end;
 
@@ -7157,7 +7258,7 @@ begin
   end;
 end;
 
-procedure TMainForm.StatusBarDrawPanel(StatusBar: TStatusBar;
+procedure TMainForm.StatusBarCanvasDrawPanel(Canvas: TCanvas;
   Panel: TStatusPanel; const Rect: TRect);
 const
   TP_DROPDOWNBUTTONGLYPH = 7;
@@ -7171,15 +7272,15 @@ begin
           Dec(RText.Right, RText.Bottom - RText.Top);
           var RGlyph := Rect;
           RGlyph.Left := RText.Right; { RGlyph is now a square }
-          DrawThemeBackground(FToolbarThemeData, StatusBar.Canvas.Handle, TP_DROPDOWNBUTTONGLYPH, TS_NORMAL, RGlyph, nil);
+          DrawThemeBackground(FToolbarThemeData, Canvas.Handle, TP_DROPDOWNBUTTONGLYPH, TS_NORMAL, RGlyph, nil);
         end;
         var S := Format('Tabs closed: %d', [FHiddenFiles.Count]);
-        StatusBar.Canvas.TextRect(RText, S, [tfCenter]);
+        Canvas.TextRect(RText, S, [tfCenter]);
       end;
     spCompileIcon:
       if FCompiling then begin
-        var BuildImageList := ImagesModule.BuildImageList;
-        ImageList_Draw(BuildImageList.Handle, FBuildAnimationFrame, StatusBar.Canvas.Handle,
+        var BuildImageList := FBuildImageList;
+        ImageList_Draw(BuildImageList.Handle, FBuildAnimationFrame, Canvas.Handle,
           Rect.Left + ((Rect.Right - Rect.Left) - BuildImageList.Width) div 2,
           Rect.Top + ((Rect.Bottom - Rect.Top) - BuildImageList.Height) div 2, ILD_NORMAL);
       end;
@@ -7189,23 +7290,23 @@ begin
         InflateRect(R, -2, -2);
         if FProgressThemeData = 0 then begin
           { Border }
-          StatusBar.Canvas.Pen.Color := clBtnShadow;
-          StatusBar.Canvas.Brush.Style := bsClear;
-          StatusBar.Canvas.Rectangle(R);
+          Canvas.Pen.Color := clBtnShadow;
+          Canvas.Brush.Style := bsClear;
+          Canvas.Rectangle(R);
           InflateRect(R, -1, -1);
           { Filled part }
           var SaveRight := R.Right;
           R.Right := R.Left + MulDiv(FProgress, R.Right - R.Left,
             FProgressMax);
-          StatusBar.Canvas.Brush.Color := clHighlight;
-          StatusBar.Canvas.FillRect(R);
+          Canvas.Brush.Color := clHighlight;
+          Canvas.FillRect(R);
           { Unfilled part }
           R.Left := R.Right;
           R.Right := SaveRight;
-          StatusBar.Canvas.Brush.Color := clBtnFace;
-          StatusBar.Canvas.FillRect(R);
+          Canvas.Brush.Color := clBtnFace;
+          Canvas.FillRect(R);
         end else begin
-          DrawThemeBackground(FProgressThemeData, StatusBar.Canvas.Handle,
+          DrawThemeBackground(FProgressThemeData, Canvas.Handle,
             PP_BAR, 0, R, nil);
           { PP_FILL drawing on Windows 11 (and probably 10) is bugged: when
             the width of the green bar is less than ~25 pixels, the bar is
@@ -7219,13 +7320,19 @@ begin
             Inc(CR.Left);  { does this need to be DPI-scaled? }
           R.Right := R.Left + MulDiv(FProgress, R.Right - R.Left,
             FProgressMax);
-          DrawThemeBackground(FProgressThemeData, StatusBar.Canvas.Handle,
+          DrawThemeBackground(FProgressThemeData, Canvas.Handle,
             PP_FILL, PBFS_NORMAL, R, @CR);
         end;
       end;
   end;
 end;
 
+procedure TMainForm.StatusBarDrawPanel(StatusBar: TStatusBar;
+  Panel: TStatusPanel; const Rect: TRect);
+begin
+  StatusBarCanvasDrawPanel(StatusBar.Canvas, Panel, Rect);
+end;
+
 procedure TMainForm.InvalidateStatusPanel(const Index: Integer);
 var
   R: TRect;

+ 1 - 0
whatsnew.htm

@@ -199,6 +199,7 @@ Source: "https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1"; DestName:
     <ul>
       <li>The <i>Find in Files</i> result list will now update its line numbers when you add or delete lines.</li>
       <li>The <i>Highlight occurrences of current word</i> option (which is disabled by default) no longer highlights a section's directive names, parameter names, or Pascal keywords. The <i>Highlight occurrences of current selection</i> option (which is enabled by default) still does.</li>
+      <li>Added dark mode support to the status bar on all versions of Windows.</li>
     </ul>
   </li>
   <li><tt>[Files]</tt> section parameter <tt>Excludes</tt> can now be combined with the <tt>external</tt> flag.</li>