C++Builder-Delphi中透明Panel及透明視窗的實現方法 |
|
conundrum
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
C Builder-Delphi中透明Panel及透明視窗的實現方法 http://www.kehui.org/aread.php?aid=20923 可能大多數程式師會問:透明視窗,特別是透明Panel有什麼應用價值呢?可別小看它們哦, 下面我就來講講他們的巨大作用。 (1) 透明視窗可以用於軟體介面特效。大家可以看到很多軟體的視窗出現或退出的時候是漸進或漸出 (2) 的,而並非象Win98那樣直接彈出視窗。這就是Win2000下所提供的功能。實現方法很簡單: this->AlphaBlend=true; this->AlphaBlendValue=100; 代碼中this是視窗的指標,當然你不能在資料模組或是其他類裏調用(廢話)。 代碼更改了視窗的屬性:AlphaBlend及AlphaBlendValue。AlphaBlend為true時視窗為透明狀態,false時 為不透明狀態;AlphaBlendValue值為整型,可以取0~255的範圍,0時為全透明,255時為全不透明, 當然中間的值為半透明咯(爽)。而視窗漸進或漸出效果只要先將AlphaBlend設為true,然後在視窗顯 示或關閉時在一個迴圈語句中逐漸將AlphaBlendValue值改大或改小,就可以了 (別忘了改完AlphaBlendValue後要刷新窗口哦:this->Refresh())。 注意,視窗透明後,視窗上面的所有控制項將跟隨視窗透明。 難道透明在視窗中的應用就如此而已嗎?NO!!!還有更精彩的。 視窗類還有兩個屬性:TransparentColor和TransparentColorValue。先將TransparentColor(bool型)設為true, 然後再將TransparentColorValue(TColor型)設為你想設為透明的顏色,那麼窗口上只要有這種顏色的地 方將呈現透明狀態。(爽爽爽)配合AlphaBlend及AlphaBlendValue屬性,可以做出想不到的特效來。 怎麼做?不用我再寫了吧。 (3) 透明Panel的實現方法。TPanel類有一大缺點:只能設置其顏色,要是想在上面放一幅bmp圖或 要透明的話無法實現;而它也有一大優點:因為他是從TWinControl類繼承而來的,所以它的上 面可以放其他控制項,再就是它可以位於同級控制項的上面。 最後一句話什麼意思?你把一個TPanel控制項放到視窗上,再把一個TImage控制項也放到視窗上,現 在這兩個控制項的父都是視窗,而這兩個控制項屬於同級關係,將Panel拖到Image上面蓋住一部分, 你會發現,無論你如何操作都無法用Image蓋住Panel,即便你用了bring to front 或set to back命令, 如果你將Image換成Panel的話,兩個Panel無論誰蓋住誰都可以了。這是因為TImage繼承 自TGraphicControl的緣故。而且凡繼承自TGraphicControl的控制項上面都不能放其他控制項。 你還可以發現TPanel類沒有TCanvas屬性,因此無法在上面畫東西。 怎麼樣實現透明,而且還可以顯示背景圖的Panel呢?答案就是自己重新做一個Panel出來,限與篇幅, 我在這裏不寫代碼,你想要的話,發個E-Mail給我:decsentangle@sohu.com 。然後我再把控制項代碼發給你 (別擔心,免費的)。C Builder和Delphi代碼都可以。 究竟透明Panel有什麼用呢?God save me,用處可大了,例如作為GIS系統中的圖層。 圖層?當然如果你用過Photoshop或Flash的話。首先,透明Panel可以接受控制項,那麼你可以將點、 線、面、圖等控制項放到它上面,而不是利用TCanvas去畫它們,利用OOP(面向物件編程)技術你就 可以方便的對他們進行操作,例如用戶用滑鼠點擊一條線的時候,可以利用該線控制項的OnMouseClick 事件觸發它,而如果是用TCanvas畫出來的線,你就不得不去確定滑鼠點擊的座標是否在這條線上。 當然你還可以利用透明Panel代替普通Panel做出很多介面特效來。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |