So schalten Sie eine Anwendung, zwischen Themenbezogenen und nicht Themenbezogenen zur Laufzeit?
Sehr viel wie das "Projekt|Optionen|Anwendung|Enable runtime themes" Aktivieren, sondern dynamisch zur Laufzeit statt.
[Delphi XE welche auf Win XP oder Win 7]
Ich habe versucht, spielen ein bisschen mit uxTheme.SetWindowTheme ohne Erfolg bisher....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur für die Ergänzung der Rob Kennedy Antwort, müssen Sie die
SetThemeAppProperties
auf diese Weise.und zu bestimmen, wenn Ihre Kontrollen sind Themen-oder nicht, können Sie die
GetThemeAppProperties
Funktion.UPDATE
Aufgrund der beschriebenen Probleme für Sie , ich check den code der
UxTheme
Einheit und ich sehe das problem mit derUseThemes
Funktion . also schrieb ich diesen kleinen patch (mit den Funktionen zum patchHookProc
,UnHookProc
undGetActualAddr
entwickelt von Andreas Hausladen), und die funktioniert ok auf meiner tests. lassen Sie mein wissen, wenn für Sie arbeitet zu.müssen Sie die PatchUxTheme in Ihrer uses-Liste. und rufen Sie die Funktionen
DisableThemesApp
undEnableThemesApp
.IsAppThemed and IsThemeActive
noch zurückTrue
die verwirrt der VCL, wenn Sie versuchen zu malen...Call
SetThemeAppProperties
.SetThemeAppProperties(0)
nicht scheinen, um eine sichtbare Wirkung.IsAppThemed and IsThemeActive
noch zurückTrue
mit oder ohneWM_THEMECHANGED
oder rufenThemeServices.ApplyThemeChange
. Ich werde versuchen, mehr an der Zukunft arbeiten mit Delphi XE...Für eines meiner Projekte, die ich verwendet, so etwas wie dieses:
Verwenden wie:
RemoveTheme([Edit1.Griff, Edit2.Handle]);