So beheben Sie den Farbeinstellungsbefehl für den aktiven Stil unter Windows:
Code:
Buffer.Canvas.Brush.Color := TStyleManager.ActiveStyle.GetStyleColor (scWindow);
um es auf Delphi 7 nutzbar zu machen?
Einfach den ganzen TStyleManager Krams löschen und die Farbe direkt setzen (clWindow) oder du nutzt den Themes Manager, der bei D7 dabei ist (ThemeServices in der
Unit Themes.pas), wenn du die Themes in deiner eigenen Komponente painten willst. Wenn du aber nur die Farben willst, musst du garnichts weiter machen als die Standard Colors nutzen wie clWindow. clButtonFace, etc. Diese haben in einer themed App automatisch die richten Werte, gemäss Windows Theme.
Da man aber anhand deines Codes nicht sieht, wo das benötigt wird, ist es schwer zu sagen wie du das da machen musst. Vermutlich kannst du auch einfach die ganze Zeile löschen, da in einer themed Anwendung (mit einem Manifest) die Windows Themes eh genutzt werden und du dich da garnicht um das Painten kümmern musst. Die Aussage D7 habe keine Styles ist so nicht richtig. Es gab da noch keine Delphi eigenen Styles, aber die Windows Styles (Themes) stehen da zur Verfügung. Über die Themes
API könntest du auch die einzlenen Farbwerte abfragen. (siehe GetThemeColor / GetThemeSysColor in UxTheme.pas)
Beispiel D7 Code zum Painten einer eigenen themed Progressbar die auf einem TGraphicControl basiert:
Delphi-Quellcode:
aRect := ClientRect;
if ThemeServices.ThemesEnabled
then
begin
Details := ThemeServices.GetElementDetails(tpBar);
ThemeServices.DrawElement(Bmp.Canvas.Handle, Details, aRect);
aRect := ThemeServices.ContentRect(Bmp.Canvas.Handle, Details, aRect);
ChunkWidth := aRect.Right - aRect.Left;
FFillWidth := ChunkWidth - Round(ChunkWidth * (100.0 - FillPercent) / 100.0);
aRect.Right := aRect.Left + FFillWidth;
Details := ThemeServices.GetElementDetails(tpChunk);
ThemeServices.DrawElement(Bmp.Canvas.Handle, Details, aRect);
with Bmp.Canvas
do
begin
if aShowText
then
begin
Font.Assign(Self.Font);
Font.Color := clWindowText;
Brush.Style := bsClear;
ThemeServices.DrawText(
Handle, Details, aText,
ClientRect, DT_CENTER
or DT_VCENTER
or DT_SINGLELINE, 0);
end;
end;
end