線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3727
推到 Plurk!
推到 Facebook!

C++Builder-Delphi中透明Panel及透明視窗的實現方法

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-23 21:00:05 IP:61.64.xxx.xxx 未訂閱
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做出很多介面特效來。
 
系統時間:2024-04-19 22:12:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!