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
Seite 1 von 2  1 2   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#1

Ermitteln ob im Manifest "Themes" aktiviert wurde?

  Alt 14. Mai 2021, 11:28
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?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.584 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 14. Mai 2021, 11:36
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.)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

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

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#3

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

  Alt 14. Mai 2021, 12:52
Das ist es!! Dankeschön dafür, baue es gerade ein
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.651 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 14. Mai 2021, 13:16
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#5

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

  Alt 14. Mai 2021, 13: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 13:50 Uhr)
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
Ort: Köln
728 Beiträge
 
Delphi 2010 Architect
 
#6

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

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

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#7

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

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

Registriert seit: 5. Dez 2019
Ort: Köln
728 Beiträge
 
Delphi 2010 Architect
 
#8

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

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

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#9

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

  Alt 14. Mai 2021, 15: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 15:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.584 Beiträge
 
Delphi 10.4 Sydney
 
#10

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

  Alt 14. Mai 2021, 15: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 +2. Es ist jetzt 04:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf