3

大家好

我在网上搜索了有关这是否可行的任何指示,但无济于事。我需要编写一个允许我选择另一个应用程序的应用程序,并通过这样做使选定的应用程序半透明并在顶部(如重影图像叠加)。

德尔福有可能吗?我正在使用 Delphi XE 和 Lazarus。如果有人可以请我指出从哪里开始的大致方向,我将非常感激。

提前致谢,

4

2 回答 2

4

您可以这样做但不建议这样做,因为这种行为必须由自己的应用程序处理。无论如何,如果你坚持,因为你有一个很好的理由这样做,我在这里留下代码来设置一个窗口的透明度并让一个窗口成为最高,只是为了展示如何做到这一点。

透明度

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

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, 0, 180, LWA_ALPHA);
    end
    else
    begin
      l := GetWindowLong(hWnd, GWL_EXSTYLE);
      l := l xor WS_EX_LAYERED;
      SetWindowLong(hWnd, GWL_EXSTYLE, 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;
于 2011-04-08T18:15:26.773 回答
3

Windows 可以做到这一点,但应用程序没有希望能够稳健地做到这一点。

于 2011-04-07T19:44:24.457 回答