Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

KodeZwerg 14. Mai 2021 10:28

Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Kann man per code ermitteln ob ein Projekt die Common-Controls aktiviert hat?
Ich würde das gerne noch in meinem Theming Projekt mit aufnehmen damit zumindest das DarkLight theming deaktiviert werden kann.

Der einzige Ansatz der mir einfällt wäre das Manifest auszulesen und zu parsen, da gibt es doch bestimmt eine bessere Lösung, oder?

himitsu 14. Mai 2021 10:36

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Delphi-Referenz durchsuchenIsNewCommonCtrl aus Vcl.Dialogs

[EDIT]
Ups, ist mal wieder eine geheime nicht-öffentliche Funktion. Manchmal möchte man den Entwicklern paar in die Fresse haun.
Delphi-Quellcode:
function IsNewCommonCtrl: Boolean; inline;
const
  ComCtlVersionIE6 = $00060000;
begin
  if Comctl32FileVersion = Cardinal(-1) then
    Comctl32FileVersion := GetFileVersion(comctl32);
  Result := Comctl32FileVersion >= ComCtlVersionIE6;
end;
[/EDIT]
Siehe auch https://docs.microsoft.com/en-us/win...oject-versions
Und es gibt noch die globale Variable Delphi-Referenz durchsuchenUseLatestCommonDialogs, um in der VCL an den meisten Stellen die "alten" Dialoge zu erzwingen, auch wenn die Neuen vorhanden sind.
(ShowMessage/CreateDialog usw.)

KodeZwerg 14. Mai 2021 11:52

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

Zitat von himitsu (Beitrag 1489430)
Delphi-Referenz durchsuchenIsNewCommonCtrl aus Vcl.Dialogs

Das ist es!! Dankeschön dafür, baue es gerade ein :)

Uwe Raabe 14. Mai 2021 12:16

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Alternativ geht auch
Delphi-Quellcode:
uses
  Vcl.ComCtrls;

function IsNewCommonCtrl: Boolean; inline;
begin
  Result := GetComCtlVersion >= ComCtlVersionIE6; // GetComCtlVersion cached den Wert selbst
end;
Das haben die besagten Entwickler aber vermutlich auch noch nicht bemerkt.

KodeZwerg 14. Mai 2021 12:38

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

Delphi-Quellcode:
 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!!

venice2 14. Mai 2021 13:08

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

KodeZwerg 14. Mai 2021 14:34

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

Zitat von venice2 (Beitrag 1489445)
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! :thumb:

:dp:

venice2 14. Mai 2021 14:36

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

KodeZwerg 14. Mai 2021 14:49

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

Bin dann mal wieder auf der Suche, diese Topic ist beendet ;)

himitsu 14. Mai 2021 14:56

AW: Ermitteln ob im Manifest "Themes" aktiviert wurde?
 
Warum LoadLibrary?
Wenn das, dann darf man auch ein FreeLibrary nicht vergessen.

User32.dll sollte aber eh immer geladen sein,
somit reicht ein GetModuleHandle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.
Seite 1 von 2  1 2      

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