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

Form 變成半透明為何Win2000沒問題,Win98下執行會有錯誤?

答題得分者是:Justmade
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-10 20:09:43 IP:61.224.xxx.xxx 未訂閱
我下載本站分享程式:(半透明視窗) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WS_EX_LAYERED = $80000; AC_SRC_OVER = $0; AC_SRC_ALPHA = $1; AC_SRC_NO_PREMULT_ALPHA = $1; AC_SRC_NO_ALPHA = $2; AC_DST_NO_PREMULT_ALPHA = $10; AC_DST_NO_ALPHA = $20; LWA_COLORKEY = $1; LWA_ALPHA = $2; ULW_COLORKEY = $1; ULW_ALPHA = $2 ; ULW_OPAQUE = $4; //新增加的常量定義 type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函數聲明 var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var l:longint; begin l:=getWindowLong(Handle, GWL_EXSTYLE); l := l Or WS_EX_LAYERED; SetWindowLong (handle, GWL_EXSTYLE, l); SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA); //第二個參數是指定透明顏色 //第二個參數為0則使用第四個參數設置alpha值,從0到255 end; end. 為何Win2000沒問題,Win98下執行會產生: "Project1.exe檔案無法連結到輸出函式USER32.DLL;Setlayered Window 程式執行錯誤等訊息" 請問各位大大:要如何解決? 何明昌
------
何明昌
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-11 02:13:12 IP:61.217.xxx.xxx 未訂閱
該篇文章的起頭..已經告知!    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23161    只能在windows2000/windows XP下使用!!    
Rocy
一般會員


發表:1
回覆:4
積分:1
註冊:2003-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-13 10:35:12 IP:218.104.xxx.xxx 未訂閱
直接在Design的时候指定窗体的AlphaBlend为True,并指定AlphaBlendValue就可以了,在Win2000或是WinXP下会自动半透明,不用自己写代码。
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-13 12:42:40 IP:61.224.xxx.xxx 未訂閱
Hi!Rocy:我不知道AlphaBlend的屬性再那?可否指點?謝謝! 何明昌
------
何明昌
Rocy
一般會員


發表:1
回覆:4
積分:1
註冊:2003-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-13 14:33:28 IP:218.104.xxx.xxx 未訂閱
在Form的属性中就有!D6就支持了:)
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-14 16:07:31 IP:61.224.xxx.xxx 未訂閱
我改用D6,AlphaBlend=True,并指定AlphaBlendValue=150後 下列函數移除不用: function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函數聲明 SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA); 在Win2000執行正常,但在Win98可以執行,但不會透明,是何故? 何明昌
------
何明昌
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-14 16:25:06 IP:218.187.xxx.xxx 未訂閱
引言: 我改用D6,AlphaBlend=True,并指定AlphaBlendValue=150後 下列函數移除不用: function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函數聲明 SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA); 在Win2000執行正常,但在Win98可以執行,但不會透明,是何故?
我想這是因為 WIN98 沒有實作 "半透明" 的功能吧 ! 記得只有 WIN2000 以上才有 ... 如果要在 WIN98 作出 "半透明", 本站好像有元件和Samples可參考.
------
將問題盡快結案也是一種禮貌!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-14 16:27:53 IP:218.16.xxx.xxx 未訂閱
因為 Alpha Blending 是 Window 2000 才開始有的新功能, Window 98 並未有這功能。 原文裡就有說 "因為沒有api支持,win9x下只能模擬,效果不太好,就象金山詞霸的取詞視窗,背景改變而窗體上還是不變。" 模擬是要你自行計算你的 Form 每一點的顏色跟背景同一點顏色對應透明值,又難寫效果又不好。
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-16 02:14:52 IP:61.225.xxx.xxx 未訂閱
mcho sir 希望你有更好的方法! < src="http://spc.tn.edu.tw/k032/images/leaf[1].gif">
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-17 09:35:27 IP:61.224.xxx.xxx 未訂閱
多謝各位回應!我也沒有有更好的方法! 何明昌
------
何明昌
系統時間:2024-04-28 14:03:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!