Как может активировать стеклянный эффект (окна Vista/7) в консольном приложении с помощью Delphi

Я должен был сделать это для проблемы программирования, вот отрывок моего Haskell:

isPalindrome :: String -> Bool
isPalindrome n = (n == reverse n)
7
задан Ry- 12 December 2013 в 05:20
поделиться

1 ответ

Пару недель назад я опубликовал эту статью в своем блоге.

Ключ заключается в использовании GetConsoleWindow и DwmEnableBlurBehindWindow функций.

Функция 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

15
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: