Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Ermitteln ob im Manifest "Themes" aktiviert wurde? (https://www.delphipraxis.net/207901-ermitteln-ob-im-manifest-themes-aktiviert-wurde.html)

venice2 14. Mai 2021 15:00

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
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..

KodeZwerg 14. Mai 2021 15:04

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

Zitat von himitsu (Beitrag 1489455)
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:

Zitat von venice2 (Beitrag 1489456)
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;

venice2 14. Mai 2021 15:11

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Er mein du mußt user32 nicht laden. (Weil immer geladen)
ein GetModuleHandle('user32') sollte reichen anstatt FreeLibrary dann einfach CloseHandle(dwm10)
Aber wie ich schon sagte ist ja aus deinem anderen Thread. ;)

EDIT:
@himitsu
Mit dwm10 := 'fails'; meinte ich das die Namensgebung nicht stimmt (nicht das LoadLibrary falsch ist oder das laden nicht funktioniert)

himitsu 14. Mai 2021 15:19

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Garkein Close nötig :wink:
und auch Try-Finally weg.

GetModuleHandle gibt einfach das aktuelle Handle zurück (oder 0 wenn nicht geladen wäre),
kein neues Handle (was man freigeben müsste)

User32 gehört mit zu den DLLs, welche durch die RTL und vorallem VCL/FMX automatisch drin sind.

venice2 14. Mai 2021 15:23

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

GetModuleHandle gibt einfach das aktuelle Handle zurück (oder 0 wenn nicht geladen wäre),
kein neues Handle (was man freigeben müsste)
https://stackoverflow.com/questions/...ehand/38057313


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz