Détecter facilement le mode d'affichage (clair ou sombre) du système d'exploitation

Windows, macOS, iOS, Android et "Linux" ont un point commun : avec le temps ils se sont tous mis à proposer un changement d'ambiance selon l'heure ou le choix de leur utilisateur. On peut basculer en mode clair, en mode sombre ou personnaliser le thème utilisé par le système d'exploitation.

Embarcadero prend cette fonctionnalité en charge sur les mobiles avec un thème clair et un thème sombre embarqués par défaut dans chaque application mobile FireMonkey générée avec Delphi mais ne le propose pas sur les plateformes desktop. En revanche nous pouvons le traiter nous-mêmes.

Si on travaille sous Windows il suffit d'interroger la base de registres. Ian Barker avait fait une démo sur ce sujet.

Si on travaille avec les autres plateformes on peut interroger l'API de l'OS ou plus simplement le service de plateforme IFMXSystemAppearanceService lorsqu'il est pris en charge.

Plutôt que se poser la question à chaque fois qu'on en a besoin j'ai regroupé ces opérations dans l'unité Olf.RTL.SystemAppearance disponibles pour les projets VCL comme FireMonkey.

Il suffit d'interroger la fonction isSystemThemeInLightMode pour savoir si le système d'exploitation est en mode clair et la fonction isSystemThemeInDarkMode pour savoir si le système est en mode sombre.

Si vous êtes dans un projet FireMonkey vous pouvez aussi vous abonner au message TSystemAppearanceChangedMessage afin d'être informé d'un changement de thème en cours d'utilisation.

Après c'est à vous d'activer le bon style ou les bonnes couleurs dans votre projet.


Mug Pascal case in AlexandrieMug Toucan DX dans la baie de Rio