加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 使其他应用程序窗口在Delphi中是半透明的

发布时间:2020-12-14 05:53:24 所属栏目:Windows 来源:网络整理
导读:美好的一天 我在网上搜索任何方向,如果这是可能的,但无济于事.我需要编写一个应用程序,允许我选择另一个应用程序,并通过这样做使选定的应用程序半透明和在顶部(如鬼图像叠加). 用Delphi可以实现这一点吗?我正在使用Delphi XE和Lazarus.如果有人可以请指出我
美好的一天

我在网上搜索任何方向,如果这是可能的,但无济于事.我需要编写一个应用程序,允许我选择另一个应用程序,并通过这样做使选定的应用程序半透明和在顶部(如鬼图像叠加).

用Delphi可以实现这一点吗?我正在使用Delphi XE和Lazarus.如果有人可以请指出我从哪里开始,我将非常感激.

提前致谢,

解决方法

您可以这样做,但不建议这样做,因为这种行为必须由自己的应用程序处理.无论如何,如果你坚持,因为你有充分的理由这样做,这里我留下代码来设置窗口的透明度和使窗户最多,只是为了说明如何做.

透明度

必须使用带有WS_EX_LAYERED标志的SetWindowLong函数和带有LWA_ALPHA的SetLayeredWindowAttributes函数来设置透明度.

Procedure SethWndTrasparent(hWnd: HWND;Transparent:boolean);
var
 l        : Longint;
 lpRect   : TRect;
begin
    if Transparent then
    begin
      l := GetWindowLong(hWnd,GWL_EXSTYLE);
      l := l or WS_EX_LAYERED;
      SetWindowLong(hWnd,GWL_EXSTYLE,l);
      SetLayeredWindowAttributes(hWnd,180,LWA_ALPHA);
    end
    else
    begin
      l := GetWindowLong(hWnd,GWL_EXSTYLE);
      l := l xor WS_EX_LAYERED;
      SetWindowLong(hWnd,l);
      GetWindowRect(hWnd,lpRect);
      InvalidateRect(hWnd,lpRect,true);
    end;
end;

使窗户最顶级

必须使用SetWindowPos函数传递HWND_TOPMOST值,该值将窗口置于所有非最顶层窗口之上.即使停用窗口,窗口也会保持最高位置.

Procedure SethWndOnTop(hWnd: HWND);
var
  lpRect   : TRect;
begin
  if GetWindowRect(hWnd,lpRect) then
  SetWindowPos(hWnd,HWND_TOPMOST,lpRect.left,lpRect.top,lpRect.Right-lpRect.left,lpRect.Bottom-lpRect.Top,SWP_SHOWWINDOW);
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读