(1)透明窗口可以用於軟件界面特效。大家可以看到很多軟件的窗口出現或退出的時候是漸進或漸出的,而並非象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屬性,可以做出想不到的特效來。怎麼做?不用我再寫了吧。
(2)透明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給我:[email protected] 。然後我再把控件代碼發給你(別擔心,免費的)。C++Builder和Delphi代碼都可以。
究竟透明Panel有什麼用呢?God save me,用處可大了,例如作為GIS系統中的圖層。圖層?當然如果你用過Photoshop或Flash的話。首先,透明Panel可以接受控件,那麼你可以將點、線、面、圖等控件放到它上面,而不是利用TCanvas去畫它們,利用OOP(面向對象編程)技術你就可以方便的對他們進行操作,例如用戶用鼠標點擊一條線的時候,可以利用該線控件的OnMouseClick事件觸發它,而如果是用TCanvas畫出來的線,你就不得不去確定鼠標點擊的坐標是否在這條線上。當然你還可以利用透明Panel代替普通Panel做出很多界面特效來。