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

超炫!任何元件變成AlphaBlend半透明特效 [NSkin.AlphaBlend]

 
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-28 21:08:42 IP:218.174.xxx.xxx 未訂閱
本文經原作者(enter2004)刪除

麻煩版主將此文移除謝謝!
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
附加檔案:81992_nskinalpha.zip
編輯記錄
enter2004 重新編輯於 2007-08-05 16:03:57, 註解 無‧
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-28 21:16:46 IP:218.174.xxx.xxx 未訂閱
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
編輯記錄
enter2004 重新編輯於 2007-08-05 16:04:32, 註解 無‧
conundrum
尊榮會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-28 21:54:31 IP:220.143.xxx.xxx 未訂閱
enter2004 你好  這麼優秀的作品 不知道是否願意為這作品加上KTOP個人版權的宣告 就如我底下的簽名檔一般 再為KTOP加速一下 謝謝    網友大大 請問你的作品,文章等 是否願意貢獻 給於KTOP網站,日後使用於DVD/VCD發售 如果可以請在簽名檔上宣告個人授權 以加速KTOP網站日後DVD/VCD資料的誕生 台灣災難都是事後算帳 無人飛行載具(Unmanned Aerial Vehicle,UAV)為什麼沒大量應用於救災行列 絲絲有2種 .net有很多種 一種治眼睛是MS 另一種治腦筋是Borland
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-29 00:45:00 IP:218.174.xxx.xxx 未訂閱
請大家把使用此函示庫得到的結果圖片po上來分享看看 因為這個可以產生許多有趣的結果 很多方面可以應用! 。 ------------------------------------------- ps:回應conundrum: 個人授權此編譯過的函示庫(僅NatureSkin.AlphaBlend"第一版")與其範例給KTop, 版權宣告字樣 Copyright(c) 2005-2006 .Author: Liu,Jiun-Jiue.
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-29 01:20:23 IP:218.174.xxx.xxx 未訂閱
抱歉,剛剛發現我忘了把nskinalpha.lib這個library放到壓縮檔裡 現在已經重新上傳。
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-30 18:47:08 IP:218.174.xxx.xxx 未訂閱
新增加對BCB 5.0的支援! 歡迎分享使用心得!
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-12-02 11:53:55 IP:221.169.xxx.xxx 未訂閱
真期待能有delphi的版本,為了找透明的Panel元件我也曾也花了不少時間,不過仍沒辦法做到淡出淡入的動畫,好羨慕BCB的朋友啊!
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-12-04 17:46:58 IP:218.174.xxx.xxx 未訂閱
實作方式 希望對Delphi使用者有幫助! (1) 建立一個TPanel,建立一個TImage,且該TImage的Parent設為該TPanel (2) 然後將該TPanel的Parent設為Windows桌面的Handle (3) 然後對該Panel刷上本身Form的相關的EX_STYLE屬性 (4) 然後該Panel及擁有與視窗同樣的AlphaBlend屬性 (5) 然後該Panel即可使用SetLayeredWindowAttributes API進行修改呼叫 (6) 然後將該Panel的Parent重新設為Form1 但是該Panel的位置卻不會跟著Form移動了 所以你需要自己處理該Panel的位置, 就是如果Form移動的話,Panel的位置你需要自己手動將他移動。 最重要的一點是第三項,這是成功的關鍵。 讓Windows以為該Panel就是一個Form
                                long wsex = ::GetWindowLongPtr( Form1->Handle, GWL_EXSTYLE );
                                wsex |= WS_EX_TOOLWINDOW ;
                                wsex &= ~WS_EX_APPWINDOW;
                                ::SetWindowLongPtr(mypanel->Handle, GWL_EXSTYLE, wsex );
                                ::SetParent(mypanel->Handle , GetDesktopWindow() );
                                SetWindowLong(mypanel->Handle, GWL_EXSTYLE, GetWindowLong(mypanel->Handle, GWL_EXSTYLE ) ^ WS_EX_LAYERED ^ WS_EX_TRANSPARENT );
                                ::SetLayeredWindowAttributes(mypanel->Handle, RGB( 0, 0, 0 ), 255 - alpha, LWA_ALPHA );
                                mypanel->Refresh() ; // 一定要呼叫,否則失敗
                                ::SetParent(mypanel->Handle , Form1->Handle );                                
                                mypanel->Repaint() ; // 一定要呼叫,否則失敗
最後 謝謝各位!
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
cheng_Chin
一般會員


發表:1
回覆:8
積分:1
註冊:2004-08-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-12-05 12:35:45 IP:210.202.xxx.xxx 未訂閱
Enter2004 仁兄: 您太厲害了!!,以後希望您多多發表文章,供我們學習揣摩。 阿欽
------
阿欽
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-12-05 22:22:59 IP:221.169.xxx.xxx 未訂閱
感謝Enter2004,我找時間研究看看,有成功再與各位分享。
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-12-07 12:55:37 IP:221.169.xxx.xxx 未訂閱
procedure TForm1.FormCreate(Sender: TObject); var alpha: integer; begin alpha := 100; image1.Parent := panel1; SetWindowLong(panel1.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); panel1.ParentWindow := getdesktopwindow; SetWindowLong(panel1.Handle, GWL_EXSTYLE, GetWindowLong(panel1.Handle, GWL_EXSTYLE) or WS_EX_LAYERED or WS_EX_TRANSPARENT); SetLayeredWindowAttributes(panel1.Handle, RGB(0, 0, 0), 255 - alpha, LWA_ALPHA); panel1.Refresh; panel1.ParentWindow := form1.Handle; panel1.Repaint; end; 目前的設定是沒反應....
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-12-07 14:46:29 IP:218.168.xxx.xxx 未訂閱
第一次呼叫要放在Form的OnActivate裡面 不能放在OnCreate喔! 而且呼叫完後,Panel的位置要自己調一下 Panel1->Left = Form1->Left; Panel1->Top = Form1->Top;
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
homanfai
一般會員


發表:6
回覆:8
積分:2
註冊:2005-12-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-12-11 16:32:20 IP:202.175.xxx.xxx 未訂閱
還是不行
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-12-11 18:31:30 IP:218.163.xxx.xxx 未訂閱
現在修改成=> 把程式跑兩次看看! 請Delphi的用戶再試試看! alpha := 100; image1.Parent := panel1; SetWindowLong(panel1.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); panel1.ParentWindow := getdesktopwindow; SetWindowLong(panel1.Handle, GWL_EXSTYLE, GetWindowLong(panel1.Handle, GWL_EXSTYLE) or WS_EX_LAYERED or WS_EX_TRANSPARENT); SetLayeredWindowAttributes(panel1.Handle, RGB(0, 0, 0), 255 - alpha, LWA_ALPHA); panel1.Refresh; panel1.ParentWindow := form1.Handle; panel1.Repaint; panel1.Left= form1.Left; panel1.Top=panel1.Top; alpha := 100; image1.Parent := panel1; SetWindowLong(panel1.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); panel1.ParentWindow := getdesktopwindow; SetWindowLong(panel1.Handle, GWL_EXSTYLE, GetWindowLong(panel1.Handle, GWL_EXSTYLE) or WS_EX_LAYERED or WS_EX_TRANSPARENT); SetLayeredWindowAttributes(panel1.Handle, RGB(0, 0, 0), 255 - alpha, LWA_ALPHA); panel1.Refresh; panel1.ParentWindow := form1.Handle; panel1.Repaint; panel1.Left= form1.Left; panel1.Top=panel1.Top; 而且放在Form的OnActivate裡面 發表人 - enter2004 於 2005/12/11 18:34:12
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
freecat
一般會員


發表:0
回覆:2
積分:0
註冊:2003-10-23

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-12-12 08:51:15 IP:218.14.xxx.xxx 未訂閱
panel1.ParentWindow := getdesktopwindow; 改为用 Windows.SetParent(Panel1.Handle, GetDesktopWindow); 就行的了 下面的也是 要用SetParent的api来做
wildbattle
一般會員


發表:7
回覆:12
積分:3
註冊:2005-12-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2006-07-22 16:38:46 IP:218.164.xxx.xxx 未訂閱

大大,不知道為何,小弟照您的方法做,但Build後出現的Form中間會有NSkin.module的字。

然後,圖片會自動歸到(0,0)的位置。移動Form也會讓圖片「亂跳」不穩定。

和大大提供的範例差很多……。請問這是小弟的BCB 6.0有問題嗎?

enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2006-07-22 19:13:14 IP:220.140.xxx.xxx 未訂閱
Sorry, 只能在WindowsXP上有效! 其他系統會出問題.
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
wildbattle
一般會員


發表:7
回覆:12
積分:3
註冊:2005-12-08

發送簡訊給我
#18 引用回覆 回覆 發表時間:2006-07-26 10:48:28 IP:218.164.xxx.xxx 未訂閱

ㄟ…小弟是用Windows XP啊…^^"

而且是BCB 6.0,不知道是不是BCB要更新?

miyada
一般會員


發表:6
回覆:7
積分:2
註冊:2008-11-02

發送簡訊給我
#19 引用回覆 回覆 發表時間:2008-11-28 11:14:53 IP:116.59.xxx.xxx 訂閱
  大家好 我是BCB的用戶 5.0版的
我也把這個用在我的程式上
但是編譯時候出現
[Linker Error] Unresolved external 'NAlphaBlend::~NAlphaBlend()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\新資料夾\UNIT1.OBJ
[Linker Error] Unresolved external 'NAlphaBlend::NAlphaBlend(Forms::TForm *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\新資料夾\UNIT1.OBJ
這是啥原因
我有#include "nskinalpha.h"了阿 還是要把lib指定路徑阿???
------
大家心地都很好 一起來學習吧
系統時間:2024-05-04 17:45:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!