在我們的一個應用程序中,我們希望使用自定義顏色,並且在很多情況下基本忽略標準窗口調色板(例如,將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