delphi 程序嵌入桌面效果的实现

function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN; 
var  
dc, dc_c: HDC;  
rgn: HRGN;  
x, y: integer; 
 coord: TPoint;  
line: boolean; 
color: TColor;  
begin  
dc := GetWindowDC(hControl);  
dc_c := CreateCompatibleDC(dc);  
SelectObject(dc_c, wMask.Handle);  
BeginPath(dc);  
for x:=0 to wMask.Width-1 do  
begin  
line := false;  
for y:=0 to wMask.Height-1 do  begin  
color := GetPixel(dc_c, x, y);  
if not (color = wColor) then  
begin 
 if not line then  
begin  
line := true;  
coord.x := x;  
coord.y := y;  
end;  
end;  
if (color = wColor) or (y=wMask.Height-1) then 
 begin  
if line then  
begin  
line := false;  
MoveToEx(dc, coord.x, coord.y, nil);  
LineTo(dc, coord.x, y);  
LineTo(dc, coord.x + 1, y);  
LineTo(dc, coord.x + 1, coord.y);  
CloseFigure(dc);  
end;  
end;  
end;  
end;  EndPath(dc);  
rgn := PathToRegion(dc);  
ReleaseDC(hControl, dc);  
Result := rgn;  
end;   
procedure TForm1.FormCreate(Sender: TObject); 
var  w1:TBitmap;  
w2:TColor;  
rgn: HRGN;   
deskHandle, ProgmanH, ShellDllH, DeskopICOH: Thandle; 
wc: TWinControl; 
i: Integer; 
begin i := 0; 
ProgmanH := FindWindow('Progman', 'Program Manager');  
while (i < 100) and (ProgmanH = 0) do 
begin 
ProgmanH := FindWindow('Progman', 'Program Manager'); 
Inc(I); Sleep(100); 
end;  
if ProgmanH = 0 then Close;  
if (ProgmanH <> 0) and IsWindow(ProgmanH) and (GetParent(ProgmanH) = 0) then 
begin 
ShellDllH := FindWindowEx(ProgmanH, 0, PChar('SHELLDLL_DefView'), ''); 
if ShellDllH <> 0 then 
DeskopICOH := FindWindowEx(ShellDllH, 0, PChar('SysListView32'), 'FolderView');  
if DeskopICOH <> 0 then 
windows.SetParent(Self.Handle, DeskopICOH) 
else 
Close; 
end;  
w1:=TBitmap.Create; 
 w1.Assign(image1.Picture.Bitmap);  
w2:=w1.Canvas.Pixels[0,0]; 
// w2 := clWhite;  
rgn := CreateRegion(w1,w2,Handle); 
if rgn<>0 then  
begin  
SetWindowRgn(Handle, rgn, true); 
end;  
w1.Free;  
end;

 

转载于:https://www.cnblogs.com/blogpro/p/11339118.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值