程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> C++Builder/Delphi中透明Panel及透明窗口的實現方法

C++Builder/Delphi中透明Panel及透明窗口的實現方法

編輯:Delphi
可能大多數程序員會問:透明窗口,特別是透明Panel有什麼應用價值呢?可別小看它們哦,下面我就來講講他們的巨大作用。

      (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做出很多界面特效來。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved