準備乙個半透明效果的png放在res目錄下。
新建乙個rc檔案:test.rc 加入專案。
內如如下
png_test png "res\未命名-1.png"
**如下:
uses winapi.gdipapi, winapi.gdipobj,activex;
procedure tform1.formcreate(sender: tobject);
var vgdip: thandle;
vbitmap: hbitmap;
voldbitmap: hbitmap;
vpoint1, vpoint2: tpoint;
vsize: tsize;
vblendfunction: tblendfunction;
vdc: hdc;
vbitmapinfo: tbitmapinfoheader;
vdibsection: tdibsection;
vbuffer: pchar;
vstream: istream;
vglobal: hglobal;
begin
setwindowlong(handle,gwl_exstyle,
getwindowlong(handle,gwl_exstyle)
or ws_ex_toolwindow
or ws_ex_layered
);//從資源中載入
with tresourcestream.create(hinstance, 'png_test', 'png') do try
vglobal := globalalloc(ghnd, size);
if vglobal = 0 then exit;
vbuffer := globallock(vglobal);
if not assigned(vbuffer) then exit;
tryread(vbuffer^, size);
finally
globalunlock(vgdip);
end;
if createstreamonhglobal(vglobal, false, vstream) <> s_ok then
exit;
if gdipcreatebitmapfromstreamicm(vstream,pointer( vgdip)) <> ok then exit;
globalfree(vglobal);
finally
free;
end;
if gdipcreatehbitmapfrombitmap(pointer(vgdip), vbitmap, 0) <> ok then
exit;
vbitmapinfo.bisize := sizeof(vbitmapinfo);
getobject(vbitmap, sizeof(vdibsection), @vdibsection);
vpoint1 := point(left, top);
vpoint2 := point(0, 0);
vsize.cx := vdibsection.dsbm.bmwidth;
vsize.cy := vdibsection.dsbm.bmheight;
vblendfunction.blendop := ac_src_over;
vblendfunction.blendflags := 0;
vblendfunction.sourceconstantalpha := $ff; // 透明度
vblendfunction.alphaformat := ac_src_alpha; //同上
vdc := createcompatibledc(canvas.handle);
voldbitmap := selectobject(vdc, vbitmap);
updatelayeredwindow(handle, canvas.handle,
@vpoint1, @vsize, vdc, @vpoint2, 0, @vblendfunction, ulw_alpha);
selectobject(vdc, voldbitmap);
deletedc(vdc);
deleteobject(vbitmap);
gdipdisposeimage(pointer(vgdip));
end;
效果圖:(後方藍色框是滑鼠選擇桌面圖示的效果) 半透明dialog的應用
下面簡單說一下 首先自定義乙個imagedialog,這樣好管理點.自定義dialog public class imagedialog extends dialog override public boolean onkeydown int keycode,keyevent event 操作 pu...
Unity 中的半透明
首先說unity中的渲染順序,在unity中改變渲染順序的方式有四層,第一層為camera的depth,第二層為sorting layers,canvas可直接在面板中調節,其他的可能需要在指令碼中設定,第三層為shader中的渲染佇列,第四層為pass pass的順序在不同情況下有差別 再說半透明...
半透明視窗的實現
在上篇 關於視窗嵌入桌面及透明的注意事項 提到 setlayeredwindowattributes 會使視窗上的控制項也一起被透明化 網上搜了一下,也沒有比較好的解決辦法 似乎唯一的解決辦法就是 在視窗後面再貼個透明視窗。步驟 1.使用 setwindowrgn 將沒有控制項的區域鏤空 2.建立乙...