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

耍花招系列, 怎麼把自己的AP透明化

 
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-26 00:29:11 IP:210.85.xxx.xxx 未訂閱
Source Code: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21523 在Win2K和WinXP (Win.Net應該也有....猜測中) User32.dll 有一個特別的function:SetLayeredWindowAttributes 可以設定將你的Form變成透明一點唷...就像FlashGet的Icon 滿好玩的, 你也可以作成VCL, 這樣也很方便
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-26 09:12:35 IP:203.73.xxx.xxx 未訂閱
哈哈~~太好玩了 感謝版主的分享
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-26 09:17:51 IP:210.71.xxx.xxx 未訂閱
API函數SetLayeredWindowAttributes,它有4個參數,分別是hwnd、crKey、bAlpha和dwFlags。hwnd指操作的窗口的句柄,crKey是指定要透明的顏色值,是和第四個參數配合使用的(當第四個參數為LWA_COLORKEY),bAlpha是透明參數,當bAlpha為0時窗口全透明,當值為255時為正常的窗口。比如要Form1透明的話,相應的語句是SetLayeredWindowAttributes(form1.Handle, 0, 100, LWA_ALPHA),不過這個API只能在Win2000下用,不支援Win98。
Jack0323
初階會員


發表:22
回覆:70
積分:28
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-04 23:10:20 IP:211.74.xxx.xxx 未訂閱
那再請問各位先進 要如何使用這個function:SetLayeredWindowAttributes呢 是否要先USE 那個Unit
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-05 00:01:33 IP:61.59.xxx.xxx 未訂閱
插花一下 Delphi 6 的Form 就有AlphaBlend 與 AlphaBlendValue 二個屬性可調整Alpha值,使Form 呈現半透明或透明的效果。追蹤其屬性,得知此屬性包裝了Win API的方法,就是lcsboy 兄所提的部份    小小範例:
procedure TForm1.FormCreate(Sender: TObject);
begin
    self.AlphaBlend :=True;
    with ScrollBar1 do
    begin
        Max:=255;
        Min:=0;
        Position :=255;
    end;
end;    procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
    self.AlphaBlendValue :=ScrollBar1.Position ;
end;
追蹤AlphaBlendValue 屬性結果
procedure TCustomForm.SetLayeredAttribs;
const
  cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
  cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
  AStyle: Integer;
begin
  if not (csDesigning in ComponentState) and
    (Assigned(SetLayeredWindowAttributes)) and HandleAllocated then
  begin
    AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
    if FAlphaBlend or FTransparentColor then
    begin
      if (AStyle and WS_EX_LAYERED) = 0 then
        SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
      SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
        cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
    end
    else
    begin
      SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
      RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
    end;
  end;
end;    
BCB 6的Form 我想應該也是有此屬性才是 ps:小弟我從Delphi 6 開始入門,至於之前版本的BCB 或是Delphi 若無此屬性,就參考lcsboy 版主的範例實現吧 --【
job11183
一般會員


發表:0
回覆:1
積分:0
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-28 12:55:58 IP:203.66.xxx.xxx 未訂閱
對不起,各位大大~ 想請問一下,如果要在NT和Delphi5上逹到此功能~ 有沒有別種方法呢~ SetLayeredWindowAttributes不支援NT~ 謝謝~
系統時間:2024-05-03 16:07:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!