全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2086
推到 Plurk!
推到 Facebook!

同樣的Color屬性 在XP上與2000卻有不同的顯示結果

答題得分者是:P.D.
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-26 11:49:01 IP:59.124.xxx.xxx 訂閱
情況是這這樣
專案中有一AForm 內置一Panel 做為BaseForm用
Panel的Color屬性設定使用預設值不變(clBtnFace)

然後繼承AForm 產生一BForm
將BForm的Panel的Color屬性改為clBackground

再繼承BForm 產生一CForm
Color屬性不變
然後再CForm上擺上TLabel TButtom等元件開始設計

接下來詭異的事情發生了
在2000上跑此一程式
CForm的Panel.Color是正常的clBackground

但在XP上跑此程式
CForm的Panel.Color則是clBtnFace
也就是AForm的原始設定
請問這樣是不是哪個繼承的屬性有動到
以致於CForm的顏色顯示跑掉?

原本以為是因為2000跟XP的Color屬性不同
但後來發現不是
因有另外產生一個Project1
只有Form1
此時若放上Panel設定Color為clBackground在XP上就可正常顯示顏色
所以才想說可能是繼承的部分出了什麼問題
請有遇過此一經驗的前輩能指點一下
感謝

P.S 使用開發環境為 Delphi 7 update1 Win2000 SP4
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-26 12:24:18 IP:210.66.xxx.xxx 訂閱
節錄 TColor的 Help,

The Graphics unit contains definitions of useful constants for TColor. These constants map either directly to the closest matching color in the system palette (for example, clBlue maps to blue) or to the corresponding system screen element color defined in the Color section of the Windows Control panel (for example, clBtnFace maps to the system color for button faces).
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-26 13:09:27 IP:59.124.xxx.xxx 訂閱
首先感謝jow前輩的回覆
我看了一下Help內容
不過好像跟我的問題不太相關
Help是說TColor先預設了幾種常用的顏色屬性
而屬性會根據不同的平台產生接近的顏色(所以可能會有色差)
但我的問題是根本顯示不同的顏色
而且也測過該顏色在XP跟2000上都是可以正常顯示的
不過還是感謝jow前輩的回覆
===================引 用 jow 文 章===================
節錄 TColor的 Help,

The Graphics unit contains definitions of useful constants for TColor. These constants map either directly to the closest matching color in the system palette (for example, clBlue maps to blue) or to the corresponding system screen element color defined in the Color section of the Windows Control panel (for example, clBtnFace maps to the system color for button faces).
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-26 13:27:14 IP:59.124.xxx.xxx 訂閱
因修改時無法上傳圖片
因此將圖片Post在圖片區
並在此附上連結
圖片請參考
http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=90989

壓縮檔內有三個檔案
1.2000 是專案在2000上Run的情況
2.XP 是專案在XP上Run的情況
3.XPTest 是另開一專案測試顏色的情況
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-27 01:38:14 IP:61.67.xxx.xxx 未訂閱
試著把xp調回"windows傳統配色樣式"(在控制台-顯示-外觀),先讓測試環境一致再來比對看看?
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-29 14:04:58 IP:59.124.xxx.xxx 訂閱
果然是這個問題
將XP調回傳統配色就可正常顯示顏色了
期間也測過Vista 一樣狀況
也是調整外觀後即可正常

但是問題來了
請問前輩
我該怎麼修正我的程式
以至可以在2000 XP Vista三平台上
都可以正常顯示?
直接將Color設定為RGB的值嗎?
之前試過 Delphi還是會自動幫我轉成clWhite(舉例)等對應的值

且另一個疑問是
若開新專案 Panel用一樣的顏色
不用換回傳統模式也可正常顯示
這樣不是很奇怪?
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-30 18:31:44 IP:59.124.xxx.xxx 訂閱
花了一個下午的時間在測試這個問題
發現一個更詭異的情形
若是另外開啟一新專案
裡面只有一個Form, Form上放置一Panel, TColor設為clBackground
Build此一專案, 則此Form上的Panel在2000與XP上皆可正常顯示clBackground顏色
但是顏色會有一些小差異 但是是可以顯示的

此時若將此一Form加入到我原本的專案檔
重新Build我原本的專案
此Form上的Panel只有在2000上可正常顯示clBackground顏色
在XP上Form上的Panel顏色看起來則會是clBtnFace

於是又做了另一個測試
將Form的顏色也改為clBackground
Build
神奇的事發生了
在XP上Form跟Panel都可正常顯示clBackground顏色了
所以其實顏色是可以正常顯示的
但是Panel的顏色好像會隨著Form的顏色做變化 (從目前測試的結果推測)
真的很怪

===================引 用 帥氣銀行 文 章===================
果然是這個問題
將XP調回傳統配色就可正常顯示顏色了
期間也測過Vista 一樣狀況
也是調整外觀後即可正常

但是問題來了
請問前輩
我該怎麼修正我的程式
以至可以在2000 XP Vista三平台上
都可以正常顯示?
直接將Color設定為RGB的值嗎?
之前試過 Delphi還是會自動幫我轉成clWhite(舉例)等對應的值

且另一個疑問是
若開新專案 Panel用一樣的顏色
不用換回傳統模式也可正常顯示
這樣不是很奇怪?
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-31 13:49:01 IP:59.124.xxx.xxx 訂閱
首先感謝jow與P.D前輩
先說結論 問題是出在XPMan上面
如果大家有興趣可以看看下面詳細的測試報告


今早又花了一些時間在測試這個Bug
昨天測試的結果是Panel顏色是可正常顯示的
所以暫時排除是TColor的問題
且昨天測時到最後發現Panel的顏色會隨著Form的顏色改變
也就是說Form是什麼顏色 Panel就會是什麼顏色
於是今天將測試程式修改一下
加入一個ColorDialog
並加上在執行時期可動態改變Form跟Panel顏色的程式碼
Run後發現跟我假設的狀況一樣 Panel的顏色會隨著Form的顏色改變
於是開始找Panel上的屬性
看有哪一些是跟Panel Parent相關的屬性
查看後發現設定跟另開的新專案檔內Form上的屬性一模一樣
所以排除Parent屬性的問題

從這幾天來的測試結果發現
1.顏色在XP上是可正常顯示的
2.Panel顏色會跟著Form改變
3.在我的專案內顏色顯示不正常 但新開的測試專案則一切正常

綜合以上的測試結果
推測應該是我專案本身的問題
於是我又開了一個新專案來測試
去掉預設的Form
將我專案的主Form擺上 Build
結果還是一樣無法正常顯示
但是這樣我還是無法找出問題在哪
於是又上了Google
這次使用 delphi XP 顏色 當關鍵字查詢
第一個出來的就是我的問題...XD

但是第二個文章的標題引起了我的興趣

Delphi.ktop討論區- 讓你的AP作出XP Style的元件

因為我是在XP上顯示不正常
於是我想說順便研究一下
如何可以做出XP效果 也許可以解決我的問題
看到一半看到XPMan 我忽然冒出一身冷汗
我立刻想到之前有一次將此一元件加入專案檔中
後來發現沒啥效果(因開發環境為Win2K) 於是就移除了
於是立刻回去查看我專案中的MainForm
果不其然 最上方有Use到XPMan
我馬上把XPMan Mark起來後Build
到XP上一跑 一切都正常了...終於
花了我幾天的時間 沒想到問題是出在這個小東西上面...
該篇文章看到最後有人有跟我一樣的問題
"使用lable或Panel ,若有設定顏色,我使用XPMan會使得顏色不見!"
更讓我確定問題是出在XPMan上
Bug是抓出來了 但因為也沒有XPMan的Source可以看
於是也就只能到這樣為止了
Bug很小 但文章卻很長
感謝大家有耐心看完
也希望這個經驗可以讓大家做個參考

最後再次感謝jow與P.D前輩
系統時間:2024-05-03 23:37:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!