全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3498
推到 Plurk!
推到 Facebook!

半透明不規則視窗的問題

尚未結案
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-17 23:04:15 IP:140.129.xxx.xxx 未訂閱
我想請教各位 除了整個視窗呈現半透明的狀態外 是否可以指定某個元件呈現半透明的狀態 譬如 Panel、Memo...等等 就如同下列這個
------
笨小孩
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-17 23:08:57 IP:140.129.xxx.xxx 未訂閱
對不起再補上圖檔 笨小孩
------
笨小孩
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-18 08:22:05 IP:61.229.xxx.xxx 未訂閱
tqpzxy
一般會員


發表:13
回覆:22
積分:7
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-18 15:28:29 IP:203.187.xxx.xxx 未訂閱
引言: 我想請教各位 除了整個視窗呈現半透明的狀態外 是否可以指定某個元件呈現半透明的狀態 譬如 Panel、Memo...等等 就如同下列這個>< face="Verdana, Arial, Helvetica"> 元件好像不能設為半透明耶?! 請看一下 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 到元件上 諸如此類程式碼很長的東東就不需要了 我想學的是簡單點的方法 ^^
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-18 18:22:48 IP:61.218.xxx.xxx 未訂閱
引言: 元件好像不能設為半透明耶?! 請看一下 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-18 22:42:46 IP:203.187.xxx.xxx 未訂閱
引言: [code] tqpzxy老先生您好: 誰說元件不能變透明,請查證後再說,別信口開河...只不過一般都是元件跟著Form變成了透明了.. < face="Verdana, Arial, Helvetica"> 呵呵!其實註冊的時候 年齡亂填的啦! 不過好像也不是只有我亂填! 至於透明的問題嘛! 我以為他是指元件「單獨」透明(請見原貼者的附圖) 您舉的例子 好像無法達到這個要求喔?!
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-19 12:55:38 IP:61.218.xxx.xxx 未訂閱
引言: 呵呵!其實註冊的時候 年齡亂填的啦! 不過好像也不是只有我亂填! 至於透明的問題嘛! 我以為他是指元件「單獨」透明(請見原貼者的附圖) 您舉的例子 好像無法達到這個要求喔?!
就跟你說我來攪局的... 不過建議您填個跟您比較相近的年齡,別人比較好稱呼您呀... < class="code">/*生活是一種藝術,用心生活才能享受生活*/
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-24 10:33:18 IP:140.129.xxx.xxx 未訂閱
那這樣看來好像暫時沒有辦法 只讓特定的元件變成透明了 我想這大概就是 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=14704127&CC=328853"> 原本我認為只能利用ActiveSkin..等這類軟體 才能做到的,竟然只要運用API也能完成,站上 的寶物太多了,讓我真的受益頗多 > 笨小孩
------
笨小孩
8866
中階會員


發表:27
回覆:147
積分:69
註冊:2002-10-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-26 11:24:31 IP:61.222.xxx.xxx 未訂閱
這問題好像很熱門 !!!??? 只可惜我只有 VC++ 的 Code ! 遠水就不了近火 !!! < >< > 喔 ! 對了請問各位一下
8866
中階會員


發表:27
回覆:147
積分:69
註冊:2002-10-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-26 11:39:34 IP:61.222.xxx.xxx 未訂閱
引言: 這問題好像很熱門 !!!??? 只可惜我只有 VC 的 Code ! 遠水救不了近火 !!! < >< > 喔 ! 對了請問各位一下 >< face="Verdana, Arial, Helvetica"> "畫面會出現閃爍的現象 " ==> 你可改用此函數 AnimateWindows 試試 !!! 發表人 - 8866 於 2004/03/26 11:58:36
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-29 21:33:22 IP:140.129.xxx.xxx 未訂閱
8866 大哥您好: 非常感謝你的回覆,對於你的回覆小弟有一點點的疑問,能不能跟你請教一下如何取得AnimateWindows 的使用說明,或者有相關的例子可供小弟我參考一下,因為我搜尋API的函數中無法找到,所以希望你可以提供我明確的方向去修改這個程式BUG,再次謝謝你的回覆,不勝感激 > 笨小孩
------
笨小孩
8866
中階會員


發表:27
回覆:147
積分:69
註冊:2002-10-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-03-31 11:08:19 IP:61.222.xxx.xxx 未訂閱
    AnimateWindows ==> 存在於user32.dll 裏 !!!    因為 "半透明不規則視窗的問題" 此問題所需要的 code 蠻複雜的 ,  且我的 Class 函數宣告的也龐大 , 所以移植上應該會有問題 ! 不過有時間的話倒是可以移植看看啦 !... < >< >
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-04-08 11:25:36 IP:140.129.xxx.xxx 未訂閱
謝謝8866大哥您的回覆 不過小弟我還是不甚了解AnimateWindows的用法< > 我想我再去搜尋看看其相關的文件好了 還有謝謝各位熱心的回應 但因為這個問題仍然沒解決 所以我只好將答題得分者設為"缺席"< > 希望各位見諒喔 笨小孩
------
笨小孩
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-04-12 20:40:03 IP:211.75.xxx.xxx 未訂閱
引言: 謝謝8866大哥您的回覆 不過小弟我還是不甚了解AnimateWindows的用法< > 我想我再去搜尋看看其相關的文件好了 還有謝謝各位熱心的回應 但因為這個問題仍然沒解決 所以我只好將答題得分者設為"缺席"< > 希望各位見諒喔 笨小孩 < face="Verdana, Arial, Helvetica"> 唉!這些只是Region的運用而已,沒有那麼困難.
afatest
一般會員


發表:11
回覆:18
積分:5
註冊:2003-09-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-04-16 08:41:43 IP:140.129.xxx.xxx 未訂閱
咦~ jcjroc大哥 你是說我的問題有解囉< > 快教教小弟我吧! 我真的粉想知道它的做法< > 笨小孩
------
笨小孩
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-04-16 21:57:48 IP:61.219.xxx.xxx 未訂閱
引言: 咦~ jcjroc大哥 你是說我的問題有解囉< > 快教教小弟我吧! 我真的粉想知道它的做法< > 笨小孩
如果是Window透明問題,敎你一個方法(只是方法而已喔!我不會將程式碼寫給你) 自己用API去Create Window 然後不處理WM_PAINT,你看一下會發生啥事? 答案就在那兒!
8866
中階會員


發表:27
回覆:147
積分:69
註冊:2002-10-14

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-01-27 14:11:21 IP:61.222.xxx.xxx 未訂閱
我利用 Alpha Blending 製作了 半透明不規則 "按鈕" ,  你可以利用我文中所提的演算法來實作即可     http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64346    這問題真是看似簡單 , 但又不簡單喔 !
enter2004
初階會員


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-11-29 02:04:25 IP:218.168.xxx.xxx 未訂閱
您好: 參照我最新發表的作品 即可達到您的需求 只使某一個元件半透明,而其他不變。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=81992 這個過程實現有點複雜 但是我已經將他包裝成一個函示庫 你可以直接呼叫使用! 如果可以的話請給分唷~
------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
系統時間:2024-04-20 2:58:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!