⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advdwm.pas

📁 TMS Component Pack V5.0包含了超过 280 个为 Delphi 以及 C++Builder 设计的 TMS 生产控件
💻 PAS
字号:
unit AdvDWM;

{$HPPEMIT ''}
{$HPPEMIT '#include "dwmapi.h"'}
{$HPPEMIT ''}

{$I TMSDEFS.INC}
{$T-}

interface

uses Windows
  {$IFDEF DELPHI2007_LVL}
  , UxTheme
  {$ELSE}
  , AdvuxTheme
  {$ENDIF}
  ;

{$EXTERNALSYM DwmDefWindowProc}
function DwmDefWindowProc(hWnd: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM;
  var plResult: LRESULT): BOOL;

{$EXTERNALSYM DwmExtendFrameIntoClientArea}
function DwmExtendFrameIntoClientArea(hWnd: HWND; const pMarInset: TMargins): HResult;

{$EXTERNALSYM DwmIsCompositionEnabled}
function DwmIsCompositionEnabled(out pfEnabled: BOOL): HResult;

function DwmCompositionEnabled: Boolean;

implementation

uses
  SysUtils;

const
  ModName = 'DWMAPI.DLL';

var
  hDWMAPI: HMODULE;

var
  _DwmDefWindowProc: function(hWnd: HWND; msg: UINT; wParam: WPARAM;
    lParam: LPARAM; var plResult: LRESULT): BOOL; stdcall;

  _DwmExtendFrameIntoClientArea: function(hWnd: HWND;
    const pMarInset: TMargins): HResult; stdcall;

  _DwmIsCompositionEnabled: function(out pfEnabled: BOOL): HResult; stdcall;

//------------------------------------------------------------------------------

procedure InitDwmApi; //inline;
begin
  if hDWMAPI = 0 then
    hDWMAPI := LoadLibrary(ModName);
end;

//------------------------------------------------------------------------------

function DwmDefWindowProc(hWnd: HWND; msg: UINT; wParam: WPARAM;
  lParam: LPARAM; var plResult: LRESULT): BOOL;
begin
  if Assigned(_DwmDefWindowProc) then
    Result := _DwmDefWindowProc(hWnd, msg, wParam, lParam, plResult)
  else
  begin
    InitDwmApi;
    Result := False;
    if hDWMAPI > 0 then
    begin
      _DwmDefWindowProc := GetProcAddress(hDWMAPI, 'DwmDefWindowProc');
      if Assigned(_DwmDefWindowProc) then
        Result := _DwmDefWindowProc(hWnd, msg, wParam, lParam, plResult);
    end;
  end;
end;

//------------------------------------------------------------------------------

function DwmExtendFrameIntoClientArea(hWnd: HWND; const pMarInset: TMargins): HResult;
begin
  if Assigned(_DwmExtendFrameIntoClientArea) then
    Result := _DwmExtendFrameIntoClientArea(hWnd, pMarInset)
  else
  begin
    InitDwmApi;
    Result := E_NOTIMPL;
    if hDWMAPI > 0 then
    begin
      _DwmExtendFrameIntoClientArea := GetProcAddress(hDWMAPI, 'DwmExtendFrameIntoClientArea');
      if Assigned(_DwmExtendFrameIntoClientArea) then
        Result := _DwmExtendFrameIntoClientArea(hWnd, pMarInset);
    end;
  end;
end;

//------------------------------------------------------------------------------

function DwmCompositionEnabled: Boolean;
var
  LEnabled: BOOL;
begin
  Result := (Win32MajorVersion >= 6) and (DwmIsCompositionEnabled(LEnabled) = S_OK) and LEnabled;
end;

//------------------------------------------------------------------------------

function DwmIsCompositionEnabled(out pfEnabled: BOOL): HResult;
begin
  if Assigned(_DwmIsCompositionEnabled) then
    Result := _DwmIsCompositionEnabled(pfEnabled)
  else
  begin
    InitDwmApi;
    Result := E_NOTIMPL;
    if hDWMAPI > 0 then
    begin
      _DwmIsCompositionEnabled := GetProcAddress(hDWMAPI, 'DwmIsCompositionEnabled');
      if Assigned(_DwmIsCompositionEnabled) then
        Result := _DwmIsCompositionEnabled(pfEnabled);
    end;
  end;
end;

//------------------------------------------------------------------------------

initialization

finalization
  if hDWMAPI > 0 then
    FreeLibrary(hDWMAPI);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -