AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Ermitteln ob im Manifest "Themes" aktiviert wurde?

Ermitteln ob im Manifest "Themes" aktiviert wurde?

Ein Thema von KodeZwerg · begonnen am 14. Mai 2021 · letzter Beitrag vom 14. Mai 2021
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 14. Mai 2021, 12:38
Delphi-Quellcode:
function kzTheme.GetDarkLightSupport: Boolean;
const
  ComCtlVersionIE6 = $00060000;
begin
  Result := (not (GetFileVersion(comctl32) >= ComCtlVersionIE6));
end;
So nutze ich es gerade, als property getter in class. Bei meinen jetzigen tests funktioniert es super. (so brauch ich weder Dialogs noch ComCtrls einbinden)

 property SupportDarkLight: Boolean read GetDarkLightSupport; aber nun entstehen an ganz anderer stelle neue spannende dinge hehehe (dwm arbeitet dann anders...)

Danke für Deinen Beitrag @Uwe!

Ich werde es nun auch so anpassen das der Wert nur einmal abgefragt wird (cached), das war nochmal ein guter tipp!!
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Mai 2021 um 12:50 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

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

  Alt 14. Mai 2021, 13:08
Zitat:
dwm arbeitet dann anders
Sorry aber es arbeitet mit deiner Anwendung gar nicht!
Da wirst du wohl noch einiges tun müssen.

Zudem hat es nichts mit DWM zu tun.. oder verwendest du irgendwelchen Code der auf die dwmapi.dll verweist? Nein!
Was du hier verwendest ist der Composition Mode (SetWindowCompositionAttribute User32.dll) mit der du die entsprechenden Attribute Blur oder Transparenz setzen kannst.

Zitat:
dwm10 := LoadLibrary(user32);
dwm10 := 'fails';

Geändert von venice2 (14. Mai 2021 um 13:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 14. Mai 2021, 14:34
Zitat:
dwm arbeitet dann anders
Da wirst du wohl noch einiges tun müssen.
dwm10 := 'fails';
Wenn Du helfen könntest das es ordentlicher funktioniert, hier ist ein Link zum Projekt.
Was ich erreichen wollte mit dieser SetWindowCompositionAttribute methode ist halt das der Hintergrund entsprechend einer Auswahl (Transparent/Blur) gesetzt wird.

Danke für Deinen Input!

Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

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

  Alt 14. Mai 2021, 14:36
Zitat:
das der Hintergrund entsprechend einer Auswahl (Transparent/Blur) gesetzt wird.
Nur mit seltsamen Effekten. Video.

Zitat:
Wenn Du helfen könntest das es ordentlicher funktioniert
Ich möchte mich da nicht mit einbringen dir aber mittteilen das etwas nicht in Ordnung ist.

Geändert von venice2 (14. Mai 2021 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 14. Mai 2021, 14:49
Ich habe mir Dein Video angeschaut und gebe Dir mehr als Recht das da noch vieles unstimmig ist. (Ich nehme an es war mit Manifest Themes aktiviert kompiliert?) (gesehn, ist ohne)
(Du kannst das Video/den Link wieder freigeben/sperren, Danke!)
Herausfinden wie man es besser macht ist mein Anliegen, ich werde mich bemühen Informationen zu erhaschen wie man es richtig anwenden sollte.
Danke für Dein Feedback!

Bin dann mal wieder auf der Suche, diese Topic ist beendet
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Mai 2021 um 14:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#6

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

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

User32.dll sollte aber eh immer geladen sein,
somit reicht ein GetModuleHandle.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

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

  Alt 14. Mai 2021, 15:00
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..
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 14. Mai 2021, 15: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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz