Вы можете сделать это , но это не рекомендуется , потому что этот тип поведения должен обрабатываться собственным приложением.в любом случае, если вы настаиваете на том, что у вас есть очень веская причина для этого , здесь я оставляю код, чтобы установить прозрачность окна и сделать окна самыми верхними, просто чтобы показать, как это можно сделать.
Прозрачность
Вы должны использовать функцию 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;
Создание окон Top Most
Вы должны использовать функцию 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;