afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
我想請教各位
除了整個視窗呈現半透明的狀態外
是否可以指定某個元件呈現半透明的狀態
譬如 Panel、Memo...等等
就如同下列這個
------ 笨小孩
|
afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
對不起再補上圖檔
笨小孩
------ 笨小孩
|
CuteBabyBoy
初階會員
發表:18 回覆:97 積分:48 註冊:2003-07-11
發送簡訊給我
|
|
tqpzxy
一般會員
發表:13 回覆:22 積分:7 註冊:2003-11-13
發送簡訊給我
|
|
axsoft
版主
發表:681 回覆:1056 積分:969 註冊:2002-03-13
發送簡訊給我
|
引言:
元件好像不能設為半透明耶?! 請看一下 dwExStyle 的 WS_EX_LAYERED 說明
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/CreateWindowEx.asp 我也想知道元件怎麼變成透明(顯示父視窗後的東西)
如果你已經知道的話!教一下吧! ^^ 不過如果是先儲存螢幕畫面再 blt 到元件上
諸如此類程式碼很長的東東就不需要了
我想學的是簡單點的方法 ^^
tqpzxy老先生您好: 誰說元件不能變透明,請查證後再說,別信口開河...只不過一般都是元件跟著Form變成了透明了..< > 我來耍寶的...您別生氣喔...< >...< >...< > 方法一: void __fastcall TForm1::FormCreate(TObject *Sender)
{
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(Handle,Canvas->Pixels[0][0], 100, LWA_ALPHA | LWA_COLORKEY); }
//--------------------------------------------------------------------------- 方法二: 以下的範例放了三個元件(TTrackBar/TButton/TImage)
Unit1.H
//--------------------------------------------------------------------------- #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp>
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTrackBar *TrackBar1;
TButton *Button1;
TImage *Image1;
void __fastcall TrackBar1Change(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
int alpha;
void __fastcall SetAlpha(int alph); public: // User declarations
__fastcall TForm1(TComponent* Owner);
__property int Alpha = {read=alpha,write=SetAlpha}; };
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif Unit1.CPP
//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetWindowLong(Handle,GWL_EXSTYLE, //make our form a layered window
GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_LAYERED);
Alpha = 255; //make sure our form starts out opaque }
//--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
Alpha = TrackBar1->Position; //set the transparency according to the slider
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetAlpha(int alph)
{
alpha = alph;
SetLayeredWindowAttributes(Handle,NULL,alpha,LWA_ALPHA);
//set the alpha level of our form
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TrackBar1->Max=255;
TrackBar1->Min=0;
TrackBar1->Position=128;
}
//---------------------------------------------------------------------------
/*生活是一種藝術,用心生活才能享受生活*/ 發表人 - axsoft 於 2004/03/18 18:51:27
|
tqpzxy
一般會員
發表:13 回覆:22 積分:7 註冊:2003-11-13
發送簡訊給我
|
引言:
[code]
tqpzxy老先生您好: 誰說元件不能變透明,請查證後再說,別信口開河...只不過一般都是元件跟著Form變成了透明了..
>>< face="Verdana, Arial, Helvetica">
呵呵!其實註冊的時候 年齡亂填的啦!
不過好像也不是只有我亂填! 至於透明的問題嘛!
我以為他是指元件「單獨」透明(請見原貼者的附圖)
您舉的例子
好像無法達到這個要求喔?!
|
axsoft
版主
發表:681 回覆:1056 積分:969 註冊:2002-03-13
發送簡訊給我
|
引言:
呵呵!其實註冊的時候 年齡亂填的啦!
不過好像也不是只有我亂填! 至於透明的問題嘛!
我以為他是指元件「單獨」透明(請見原貼者的附圖)
您舉的例子
好像無法達到這個要求喔?!
就跟你說我來攪局的...
不過建議您填個跟您比較相近的年齡,別人比較好稱呼您呀... < class="code">/*生活是一種藝術,用心生活才能享受生活*/
|
afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
那這樣看來好像暫時沒有辦法
只讓特定的元件變成透明了
我想這大概就是 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=14704127&CC=328853"> 原本我認為只能利用ActiveSkin..等這類軟體
才能做到的,竟然只要運用API也能完成,站上
的寶物太多了,讓我真的受益頗多 > 笨小孩
------ 笨小孩
|
8866
中階會員
發表:27 回覆:147 積分:69 註冊:2002-10-14
發送簡訊給我
|
這問題好像很熱門 !!!??? 只可惜我只有 VC++ 的 Code !
遠水就不了近火 !!! < >< > 喔 ! 對了請問各位一下
|
8866
中階會員
發表:27 回覆:147 積分:69 註冊:2002-10-14
發送簡訊給我
|
引言:
這問題好像很熱門 !!!??? 只可惜我只有 VC 的 Code !
遠水救不了近火 !!! < >< > 喔 ! 對了請問各位一下 >>< face="Verdana, Arial, Helvetica"> "畫面會出現閃爍的現象 " ==> 你可改用此函數 AnimateWindows 試試 !!! 發表人 - 8866 於 2004/03/26 11:58:36
|
afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
8866 大哥您好:
非常感謝你的回覆,對於你的回覆小弟有一點點的疑問,能不能跟你請教一下如何取得AnimateWindows
的使用說明,或者有相關的例子可供小弟我參考一下,因為我搜尋API的函數中無法找到,所以希望你可以提供我明確的方向去修改這個程式BUG,再次謝謝你的回覆,不勝感激 > 笨小孩
------ 笨小孩
|
8866
中階會員
發表:27 回覆:147 積分:69 註冊:2002-10-14
發送簡訊給我
|
AnimateWindows ==> 存在於user32.dll 裏 !!! 因為 "半透明不規則視窗的問題" 此問題所需要的 code 蠻複雜的 ,
且我的 Class 函數宣告的也龐大 , 所以移植上應該會有問題 !
不過有時間的話倒是可以移植看看啦 !... < >< >
|
afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
謝謝8866大哥您的回覆
不過小弟我還是不甚了解AnimateWindows的用法< >
我想我再去搜尋看看其相關的文件好了 還有謝謝各位熱心的回應
但因為這個問題仍然沒解決
所以我只好將答題得分者設為"缺席"< >
希望各位見諒喔 笨小孩
------ 笨小孩
|
jcjroc
高階會員
發表:21 回覆:279 積分:115 註冊:2002-09-18
發送簡訊給我
|
引言:
謝謝8866大哥您的回覆
不過小弟我還是不甚了解AnimateWindows的用法< >
我想我再去搜尋看看其相關的文件好了 還有謝謝各位熱心的回應
但因為這個問題仍然沒解決
所以我只好將答題得分者設為"缺席"< >
希望各位見諒喔 笨小孩
>>< face="Verdana, Arial, Helvetica"> 唉!這些只是Region的運用而已,沒有那麼困難.
|
afatest
一般會員
發表:11 回覆:18 積分:5 註冊:2003-09-24
發送簡訊給我
|
咦~ jcjroc大哥
你是說我的問題有解囉< > 快教教小弟我吧!
我真的粉想知道它的做法< > 笨小孩
------ 笨小孩
|
jcjroc
高階會員
發表:21 回覆:279 積分:115 註冊:2002-09-18
發送簡訊給我
|
引言:
咦~ jcjroc大哥
你是說我的問題有解囉< > 快教教小弟我吧!
我真的粉想知道它的做法< > 笨小孩
如果是Window透明問題,敎你一個方法(只是方法而已喔!我不會將程式碼寫給你)
自己用API去Create Window 然後不處理WM_PAINT,你看一下會發生啥事?
答案就在那兒!
|
8866
中階會員
發表:27 回覆:147 積分:69 註冊:2002-10-14
發送簡訊給我
|
我利用 Alpha Blending 製作了 半透明不規則 "按鈕" ,
你可以利用我文中所提的演算法來實作即可 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64346 這問題真是看似簡單 , 但又不簡單喔 !
|
enter2004
初階會員
發表:51 回覆:94 積分:34 註冊:2005-04-10
發送簡訊給我
|
您好: 參照我最新發表的作品
即可達到您的需求
只使某一個元件半透明,而其他不變。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=81992 這個過程實現有點複雜
但是我已經將他包裝成一個函示庫
你可以直接呼叫使用! 如果可以的話請給分唷~
------ 人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
|