AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign So beheben Sie den Farbeinstellungsbefehl für den aktiven Stil unter Windows
Thema durchsuchen
Ansicht
Themen-Optionen

So beheben Sie den Farbeinstellungsbefehl für den aktiven Stil unter Windows

Ein Thema von neumimnemecky · begonnen am 21. Jul 2022 · letzter Beitrag vom 3. Aug 2022
 
Rolf Frei

Registriert seit: 19. Jun 2006
657 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: So beheben Sie den Farbeinstellungsbefehl für den aktiven Stil unter Windows

  Alt 22. Jul 2022, 11:48
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

Geändert von Rolf Frei (22. Jul 2022 um 15:26 Uhr)
  Mit Zitat antworten Zitat
 


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 +1. Es ist jetzt 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz