Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?

  Alt 14. Mai 2021, 16:04
Warum LoadLibrary?
Wenn das, dann darf man auch ein FreeLibrary nicht vergessen.

User32.dll sollte aber eh immer geladen sein,
somit reicht ein GetModuleHandle.
Zitat:
Warum LoadLibrary?
na ja das ist schon stimmig. Das tut er doch!
FreeLibrary(dwm10); (Die Namensgebung ist aber falsch weil es nichts mit DWM zu tun hat)

Aber gehört zu einem anderen Thema..
Nur der Vollständigkeit halber hier der Code den Emil anspricht:
Delphi-Quellcode:
procedure kzTheme.SetDwmMode(const AMode: ShortInt);
const
  WCA_ACCENT_POLICY = 19;
  ACCENT_DISABLE = 0;
  ACCENT_ENABLE_GRADIENT = 1;
  ACCENT_ENABLE_TRANSPARENT = 2;
  ACCENT_ENABLE_BLURBEHIND = 3;
  GRADIENT_COLOR = $01000000;
  DrawLeftBorder = $20;
  DrawTopBorder = $40;
  DrawRightBorder = $80;
  DrawBottomBorder = $100;
var
  dwm10: THandle;
  data: TWinCompAttrData;
  accent: AccentPolicy;
begin
  if (not ((AMode = 0) or (AMode = 2) or (AMode = 3))) then
    Exit;
  dwm10 := LoadLibrary(user32);
  try
    @SetWindowCompositionAttribute :=
      GetProcAddress(dwm10, 'SetWindowCompositionAttribute');
    if @SetWindowCompositionAttribute <> nil then
    begin
      accent.AccentState := AMode;
      accent.AccentFlags := DrawLeftBorder or DrawTopBorder or
        DrawRightBorder or DrawBottomBorder;
      if ((FStyleTheme = ThemeSystem) or (FStyleTheme = ThemeWallpaper)) then
        accent.GradientColor := FColorBackground;
      data.attribute := WCA_ACCENT_POLICY;
      data.dataSize := SizeOf(accent);
      data.pData := @accent;
      SetWindowCompositionAttribute(FForm.Handle, data);
    end;
  finally
    FreeLibrary(dwm10);
  end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat