2011-04-07 57 views
3

美好的一天全部在德爾福製作其他應用程序窗口的半透明

我搜索了網絡上的任何方向,如果這是可能的,但無濟於事。我需要編寫一個應用程序,允許我選擇另一個應用程序,並通過這樣做使選定的應用程序半透明和頂部(如幻影圖像疊加)。

這是所有可能與德爾福?我正在使用Delphi XE和Lazarus。如果任何人都可以請我指出從哪裏開始的大方向,我將非常感激。

由於提前,

回答

4

您可以這樣做但不建議,因爲這種行爲必須由自己的應用程序處理。無論如何,如果你堅持,因爲你是否有很好的理由來做到這一點,在這裏我留下的代碼來設置窗口的透明度,並使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值以上地方所有非最頂層窗口的窗口。窗口保持最高位置,即使它被禁用。

+0

非常感謝您的協助。 – georgelappies 2011-04-09 05:11:42

3

Windows可以做到這一點,但一個應用程序已經沒有了有力這樣的希望。

+0

您要求的聲音聽起來像是在另一個窗體上強制使用玻璃或alpha混合的方式。正如David所說,兩者都會有問題和故障。也許在Linux上,如果你足夠攻擊Gnome3和X11(x.org)的源代碼,你可能可以做到這一點,但不能在Windows上。 – 2011-04-07 21:14:16