在我们的一个应用程序中,我们希望使用自定义颜色,并且在很多情况下基本忽略标准窗口调色板(例如,将WindowText设置为蓝色而不是黑色)。我认为要做到这一点只是创建一个逻辑调色板,并使用SelectPalette和RealizePalette将其应用于应用程序,但我找不到使用这些调色板的好例子。这可能吗?可以使用逻辑调色板来代替系统调色板吗?
回答
你所要求的将是GetStockObject
的倒数(好吧,严格来说,还有几个函数需要像GetSysColor
这样的索引也是相关的)。但是,没有这样的函数来设置每个进程的这些函数(除非你想去系统范围,SetSysColors,你的问题似乎排除)。你最好的选择 - 也是最简单的方法 - 就是在你的进程中挂钩这些函数(Windows为你做了copy-on-write部分,因此可以将它挂在gdi32.dll占用的内存中)并返回你自己的对象(刷子,字体,笔,颜色)。尝试确保在应用程序完成后清理GDI对象。这正是你要求的东西,但不一定是在Delphi中实现效果的最简单方法。 编辑:大卫Heffernan指出,关于挂钩的建议不考虑主题。他是对的。所以也许这不是最好的方法。
但是,考虑到您使用的是Delphi,可能最容易推导出您想要自定义的VCL类(实用于控件和表单)。或者,您可以使用RTTI遍历表单的元素并根据需要修改元素(统一地和按照控件类型)。
如果您的应用程序只需要它在应用程序中的某些控件,WM_CTLCOLOREDIT
和朋友我更容易的方法。
无论哪种方式:请考虑可用性和应用程序的UX(用户体验),通常是更好的,如果应用程序使用熟悉的控制元件,款式,颜色...
这些日子你为什么需要使用调色板?只要使用RGB值即可。
调色板可追溯到8位(及更低)彩色设备的日期。现在我们已经全部转移到了16位颜色和最近的32位颜色,他们已经成为了一个遗迹。
调色板不能帮助。您应该编辑您的问题,以说明您在此评论中所说的内容。 – 2011-03-28 23:42:12
汤姆,你问因为VCL中的某些控件可以更容易地完成,而不是其他控件。对于更彻底的解决方案,您可能对Delphi的主题化或皮肤解决方案感兴趣。这将帮助您实现不仅自定义的颜色,而且完全自定义的外观。
德尔福有各种主题和蒙皮系统。你所谈论的方法(你称之为“逻辑调色板”实际上是Windows系统的颜色方案)归结为钩住Windows GetSysColor函数,并且几乎没有你希望的那么好。
相反,尝试了彻底的解决办法:Skins(显示的链接是SpTbxLib皮肤)
顺便说一句,有些人讨厌皮肤的应用程序(见其他问题,评论)等任何皮肤功能,您实现应该有一个OFF开关。还有些人视力有限,依靠windows高对比度主题工作。想想那些不得不使用你建立的人的人。
因为此应用程序使用其他不能剥皮的组件,剥皮并不好。高对比度不是决定方案的问题,用户是无论如何整天都在使用计算机的专业人士(有限市场)。 – 2011-04-01 15:31:10
我还没遇到很多“不能”被剥皮的组件。那些不能的,可能使用OpenGL,DirectX API或GDI +。任何简单的旧GDI都可能被剥皮。 – 2011-04-01 15:42:05
我们有德尔福5.找到皮肤控制,将与这个古董工作,除非我想去海盗,几乎是不可能的,这不是我的选择。 – 2011-04-01 17:13:05
- 1. 任何Windows终端的调色板可以用pdcurses编辑吗?
- 2. Eclipse调色板不可用
- 3. 调出调色板
- 4. OllyDbg调色板
- 5. 使用调色板中的所有颜色色板
- 6. 是否可以在输入类型中调用预设的颜色调色板而不是标准调色板?
- 7. ImageMagick更改使用C#替换调色板上的颜色#
- 8. 在r中调整颜色调色板
- 9. 不同的色调调色板
- 10. 更改调色板
- 11. Web调色板Winform
- 12. 调色板缩减
- 13. 从使用的故事板颜色调色板编程方式
- 14. 自动编辑LabVIEW调色板设置
- 15. 创建颜色调色板从基色
- 16. Talend工具 - “调色板不可用”
- 17. 如何将这个灰度调色板修改为调色板?
- 18. GIF可以存储没有调色板的灰度图像吗?
- 19. 有什么办法可以分割rgb调色板吗?
- 20. 我可以在scale_fill_distiller中导入调色板吗?
- 21. PNG - 是否可以使用Java 2D减少调色板?
- 22. 可以使用javascript更改图像调色板?
- 23. Sass函数调用多个调色板
- 24. 用调色板调整子图形
- 25. 如何调用矩阵调色板API
- 26. 如何从非调色板元素的调色板中选取颜色?
- 27. CKEditor:文本颜色和背景颜色可以使用不同的调色板吗?
- 28. 如何获取系统主题的调色板?
- 29. RibbonWindow Office 2007黑色主题的调色板(使用的颜色)?
- 30. 我可以使用OpenACC来系统调用python函数吗?
+1特别针对“无论哪种方式”的评论。这是我的系统,我选择了主题。 – 2011-03-29 01:18:08
即使你钩住GetStockObject和GetSysColor,主题API又如何呢?如果你真的想这样做,那么你应该皮肤你的应用程序。但它会破坏你的应用程序的可用性。 – 2011-03-29 08:13:23
@David:真实点。甚至没有考虑主题API。 – 0xC0000022L 2011-03-29 12:45:50