美好的一天全部在德爾福製作其他應用程序窗口的半透明
我搜索了網絡上的任何方向,如果這是可能的,但無濟於事。我需要編寫一個應用程序,允許我選擇另一個應用程序,並通過這樣做使選定的應用程序半透明和頂部(如幻影圖像疊加)。
這是所有可能與德爾福?我正在使用Delphi XE和Lazarus。如果任何人都可以請我指出從哪裏開始的大方向,我將非常感激。
由於提前,
美好的一天全部在德爾福製作其他應用程序窗口的半透明
我搜索了網絡上的任何方向,如果這是可能的,但無濟於事。我需要編寫一個應用程序,允許我選擇另一個應用程序,並通過這樣做使選定的應用程序半透明和頂部(如幻影圖像疊加)。
這是所有可能與德爾福?我正在使用Delphi XE和Lazarus。如果任何人都可以請我指出從哪裏開始的大方向,我將非常感激。
由於提前,
您可以這樣做但不建議,因爲這種行爲必須由自己的應用程序處理。無論如何,如果你堅持,因爲你是否有很好的理由來做到這一點,在這裏我留下的代碼來設置窗口的透明度,並使Windows最多,只是爲了展示如何做到。
透明度
必須使用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;
使Windows最上面的
必須使用SetWindowPos
函數傳遞HWND_TOPMOST
值以上地方所有非最頂層窗口的窗口。窗口保持最高位置,即使它被禁用。
Windows可以做到這一點,但一個應用程序已經沒有了有力這樣的希望。
您要求的聲音聽起來像是在另一個窗體上強制使用玻璃或alpha混合的方式。正如David所說,兩者都會有問題和故障。也許在Linux上,如果你足夠攻擊Gnome3和X11(x.org)的源代碼,你可能可以做到這一點,但不能在Windows上。 – 2011-04-07 21:14:16
非常感謝您的協助。 – georgelappies 2011-04-09 05:11:42