7

因爲我可以在控制檯應用程序上激活玻璃效果。我正在使用Windows 7和德爾福2010年。如何在使用Delphi的控制檯應用程序中激活玻璃效果(Windows Vista/7)

我發現this應用程序,所以它應該是可能的。

+1

控制檯窗口是共享資源。它不屬於你的程序。不要對不屬於您的窗口進行全局更改。如果您的客戶希望他們的控制檯窗口看起來很花哨,他們可以安裝您鏈接的程序。 – 2009-11-19 22:54:00

回答

15

幾個星期前,我在我的博客上發佈了this article

關鍵是使用GetConsoleWindowDwmEnableBlurBehindWindow函數。

GetConsoleWindow函數檢索與調用進程關聯的控制檯使用的窗口句柄。

DwmEnableBlurBehindWindow函數使所提供的窗口句柄上的模糊效果(玻璃)。

program ConsoleGlassDelphi; 

{$APPTYPE CONSOLE} 

    uses 
    Windows, 
    SysUtils; 

type 
    DWM_BLURBEHIND = record 
    dwFlags     : DWORD; 
    fEnable     : BOOL; 
    hRgnBlur    : HRGN; 
    fTransitionOnMaximized : BOOL; 
    end; 

function DwmEnableBlurBehindWindow(hWnd : HWND; const pBlurBehind : DWM_BLURBEHIND) : HRESULT; stdcall; external 'dwmapi.dll' name 'DwmEnableBlurBehindWindow';//function to enable the glass effect 
function GetConsoleWindow: HWND; stdcall; external kernel32 name 'GetConsoleWindow'; //get the handle of the console window 

function DWM_EnableBlurBehind(hwnd : HWND; AEnable: Boolean; hRgnBlur : HRGN = 0; ATransitionOnMaximized: Boolean = False; AFlags: Cardinal = 1): HRESULT; 
var 
    pBlurBehind : DWM_BLURBEHIND; 
begin 
    pBlurBehind.dwFlags:=AFlags; 
    pBlurBehind.fEnable:=AEnable; 
    pBlurBehind.hRgnBlur:=hRgnBlur; 
    pBlurBehind.fTransitionOnMaximized:=ATransitionOnMaximized; 
    Result:=DwmEnableBlurBehindWindow(hwnd, pBlurBehind); 
end; 

begin 
    try 
    DWM_EnableBlurBehind(GetConsoleWindow(), True); 
    Writeln('See my glass effect'); 
    Writeln('Go Delphi Go'); 
    Readln; 
    except 
    on E:Exception do 
     Writeln(E.Classname, ': ', E.Message); 
    end; 
end. 

這只是一個基本的例子;您必須檢查Windows操作系統版本以避免問題。

Screenshot

+0

如果將「窗口顏色和外觀」設置爲霜凍,這種方法效果不佳...白色背景上的白色文字 – 2011-02-16 03:22:50