国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++Builder/Delphi中透明Panel及透明窗口的實(shí)現(xiàn)方法

2019-11-18 18:27:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
可能大多數(shù)程序員會(huì)問(wèn):透明窗口,特別是透明Panel有什么應(yīng)用價(jià)值呢?可別小看它們哦,下面我就來(lái)講講他們的巨大作用。

    (1)透明窗口可以用于軟件界面特效。大家可以看到很多軟件的窗口出現(xiàn)或退出的時(shí)候是漸進(jìn)或漸出的,而并非象Win98那樣直接彈出窗口。這就是Win2000下所提供的功能。實(shí)現(xiàn)方法很簡(jiǎn)單:

    this->AlphaBlend=true;

    this->AlphaBlendValue=100;

    代碼中this是窗口的指針,當(dāng)然你不能在數(shù)據(jù)模塊或是其他類(lèi)里調(diào)用(廢話)。代碼更改了窗口的屬性:AlphaBlend及AlphaBlendValue。AlphaBlend為true時(shí)窗口為透明狀態(tài),false時(shí)為不透明狀態(tài);AlphaBlendValue值為整型,可以取0~255的范圍,0時(shí)為全透明,255時(shí)為全不透明,當(dāng)然中間的值為半透明咯(爽)。而窗口漸進(jìn)或漸出效果只要先將AlphaBlend設(shè)為true,然后在窗口顯示或關(guān)閉時(shí)在一個(gè)循環(huán)語(yǔ)句中逐漸將AlphaBlendValue值改大或改小,就可以了(別忘了改完AlphaBlendValue后要刷新窗口哦:this->Refresh())。注意,窗口透明后,窗口上面的所有控件將跟隨窗口透明。

    難道透明在窗口中的應(yīng)用就如此而已嗎?NO!!!還有更精彩的。窗口類(lèi)還有兩個(gè)屬性:TransparentColor和TransparentColorValue。先將TransparentColor(bool型)設(shè)為true,然后再將TransparentColorValue(TColor型)設(shè)為你想設(shè)為透明的顏色,那么窗口上只要有這種顏色的地方將呈現(xiàn)透明狀態(tài)。(爽爽爽)配合AlphaBlend及AlphaBlendValue屬性,可以做出想不到的特效來(lái)。怎么做?不用我再寫(xiě)了吧。

    (2)透明Panel的實(shí)現(xiàn)方法。TPanel類(lèi)有一大缺點(diǎn):只能設(shè)置其顏色,要是想在上面放一幅bmp圖或要透明的話無(wú)法實(shí)現(xiàn);而它也有一大優(yōu)點(diǎn):因?yàn)樗菑腡WinControl類(lèi)繼承而來(lái)的,所以它的上面可以放其他控件,再就是它可以位于同級(jí)控件的上面。最后一句話什么意思?你把一個(gè)TPanel控件放到窗口上,再把一個(gè)TImage控件也放到窗口上,現(xiàn)在這兩個(gè)控件的父都是窗口,而這兩個(gè)控件屬于同級(jí)關(guān)系,將Panel拖到Image上面蓋住一部分,你會(huì)發(fā)現(xiàn),無(wú)論你如何操作都無(wú)法用Image蓋住Panel,即便你用了bring to front 或set to back命令,如果你將Image換成Panel的話,兩個(gè)Panel無(wú)論誰(shuí)蓋住誰(shuí)都可以了。這是因?yàn)門(mén)Image繼承自TGraphicControl的緣故。而且凡繼承自TGraphicControl的控件上面都不能放其他控件。你還可以發(fā)現(xiàn)TPanel類(lèi)沒(méi)有TCanvas屬性,因此無(wú)法在上面畫(huà)東西。

    怎么樣實(shí)現(xiàn)透明,而且還可以顯示背景圖的Panel呢?答案就是自己重新做一個(gè)Panel出來(lái),限與篇幅,我在這里不寫(xiě)代碼,你想要的話,發(fā)個(gè)E-Mail給我:decsentangle@sohu.com 。然后我再把控件代碼發(fā)給你(別擔(dān)心,免費(fèi)的)。C++Builder和Delphi代碼都可以。

    究竟透明Panel有什么用呢?God save me,用處可大了,例如作為GIS系統(tǒng)中的圖層。圖層?當(dāng)然如果你用過(guò)photoshopFlash的話。首先,透明Panel可以接受控件,那么你可以將點(diǎn)、線、面、圖等控件放到它上面,而不是利用TCanvas去畫(huà)它們,利用OOP(面向?qū)ο缶幊蹋┘夹g(shù)你就可以方便的對(duì)他們進(jìn)行操作,例如用戶用鼠標(biāo)點(diǎn)擊一條線的時(shí)候,可以利用該線控件的OnMouseClick事件觸發(fā)它,而如果是用TCanvas畫(huà)出來(lái)的線,你就不得不去確定鼠標(biāo)點(diǎn)擊的坐標(biāo)是否在這條線上。當(dāng)然你還可以利用透明Panel代替普通Panel做出很多界面特效來(lái)。


上一篇:一個(gè)C++程序員的Delphi學(xué)習(xí)筆記

下一篇:給Delphi/C++Builder程序員:編寫(xiě)高質(zhì)量代碼的一個(gè)小竅門(mén)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門(mén)圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 堆龙德庆县| 东光县| 天水市| 沅江市| 长宁县| 苍山县| 迁安市| 游戏| 四会市| 莫力| 达州市| 白朗县| 靖州| 金塔县| 定州市| 石家庄市| 手机| 枣强县| 微山县| 达日县| 五莲县| 汉川市| 仁布县| 林西县| 乌拉特后旗| 富平县| 化德县| 新巴尔虎左旗| 昌宁县| 洛隆县| 梁河县| 丁青县| 台前县| 民权县| 运城市| 平顶山市| 巴里| 和田县| 五寨县| 金昌市| 许昌县|