7

Ponieważ mogę aktywować efekt szkła w aplikacjach konsoli. Używam Windows 7 i Delphi 2010.W jaki sposób można aktywować efekt szkła (Windows Vista/7) w aplikacji konsoli przy użyciu Delphi

Znalazłem aplikację this, więc powinno być możliwe.

+1

Okno konsoli jest udostępnionym zasobem. To nie należy do twojego programu. Nie wprowadzaj globalnych zmian w oknie, które nie należy do ciebie. Jeśli Twoi klienci chcą, aby ich okna konsoli wyglądały fantazyjnie, mogą zainstalować program, z którym się łączysz. –

Odpowiedz

15

Kilka tygodni temu opublikowałem this article na moim blogu.

Kluczem jest użycie funkcji GetConsoleWindow i DwmEnableBlurBehindWindow.

Funkcja GetConsoleWindow pobiera uchwyt okna używany przez konsolę związaną z procesem wywołującym.

Funkcja DwmEnableBlurBehindWindow umożliwia efekt rozmycia (szkło) na dostarczonym uchwycie okna.

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. 

To tylko podstawowy przykład; musisz sprawdzić wersję systemu operacyjnego Windows, aby uniknąć problemów.

Screenshot

+0

Ta dawka nie działa dobrze, jeśli "Kolor i wygląd okna" jest ustawiony na mróz ... biały tekst na białym tle –

Powiązane problemy