AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VCL Styles nur für einzelne Controls?

Ein Thema von ULIK · begonnen am 6. Nov 2024 · letzter Beitrag vom 18. Jan 2025
Antwort Antwort
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#1

VCL Styles nur für einzelne Controls?

  Alt 6. Nov 2024, 16:39
Ist es irgendwie möglich, die VCL Styles nur für einzelne Controls zu aktivieren, nicht aber für die gesamte Anwendung?

Hintergrund der Frage: meine Anwendung verwendet das Skinning vom DevExpress um einen dunklen Modus und ein W11 kompatibles Aussehen zu realisieren (da stark DX-Controls basiert). Allerdings gibt es noch einzelne andere Controls die vom DX-Skinning nicht erfaßt werden.
Das führt nun dazu, daß manche Scrollbars nun im W11 Stil (und dunkel) dargestellt werden, andere dagegen im Default VCL-Stil und hell.

Meine Idee war es nun, die VCL Stile dafür zu verwenden und nur die paar Controls damit partiell zu skinnen, die vom DX Skinning nicht erfaßt werden. Theoretisch funktioniert das auch, sobald ich die VCL-Styles einbinde und den Default auf einen der gewählten stelle. Dann erscheinen nun die Scrollbars richtig geskinnt und ich kann über den StyleName des Controls explizit z.B. Hell/Dunkel umstellen. Nur führt das generelle Skinnen zu anderen Problem, das es wiederum Elemente erfaßt, die explizit nicht geskinnt werden sollen.

Sobald ich aber das VCL-Skining mit Default 'Windows' verwende, greift für die Controls das Skinning überhaupt nicht mehr, auch wenn ich dort dann explizit als StyleName einen von mir gewünschten einsetze.


Gibt es da irgendeine Lösung? Mir würde es im Prinzip reichen, wenn ich einem Control (z.B. TMemo) sagen könnte: bitte stelle die interne Scrollbar so dar, wie es das Betriebssystem darstellen würde. Und verwende dazu die optionale(n) Farbe(n) ...
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
705 Beiträge
 
Delphi 12 Athens
 
#2

AW: VCL Styles nur für einzelne Controls?

  Alt 6. Nov 2024, 16:52
Hast Du mal versucht, die StyleElements-Eigenschaft der betreffenden Controls zu ändern?
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: VCL Styles nur für einzelne Controls?

  Alt 6. Nov 2024, 17:16
Das will ich eigentlich vermeiden. Denn dann müßte ich von allen Controls die Properties erst einmal leeren und dann wieder einschalten, wo benötigt. Mir wäre eine Lösung ohne Default VCL-Stil insofern sypathischer, das sich dann hoffentlich nicht das VCL Skinning und das DX-Skinning in die Quere kommen können. Ich bin mir nicht sicher, ob DX Skinning immer ein mögliches VCL Skinning überschreibt. Es scheint zwar so zu sein, aber ich weiß es halt nicht sicher.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.527 Beiträge
 
Delphi 12 Athens
 
#4

AW: VCL Styles nur für einzelne Controls?

  Alt 6. Nov 2024, 17:30
Du kannst den VCL-Style in der Applikation aktivieren und trotzdem bei jedem Form den Windows-Style auswählen. Dann sollte es auch funktionieren, wenn du einzelne Controls im Form einen anderen Style gibst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
298 Beiträge
 
Delphi 12 Athens
 
#5

AW: VCL Styles nur für einzelne Controls?

  Alt 6. Nov 2024, 17:33
Ich hatte mal gewissermaßen das umgekehrte Problem:
Ich verwende einen dunklen VCL-Stil, der aber nicht bei allen Komponenten richtig greift (oftmals sind Drittanbieterkomponenten ein Problem).
Meine Lösung war es, eine generische Methode zu schreiben, die im FormCreate einer Form deren Komponentenliste durchgeht und, wenn sie auf einen Problemtyp stößt, bei der Komponente die problematischen StyleElements deaktiviert und manuell Farben etc anpasst.

Abhängig davon, um was für und wieviele Control-Typen es sich handelt, wäre das vielleicht eine Option.
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: VCL Styles nur für einzelne Controls?

  Alt 7. Nov 2024, 16:43
Vielen Dank für all die Tips. Leider haben diese alle in der realen Anwendung so ihre Probleme, so daß das Verwenden der VCL Skins entfällt.
Aber da es mir ja eigentlich nur um die Farben der Scrollbars geht, die manche Controls intern erstellen, da habe ich nun eine andere Lösung gefunden:

SetWindowTheme(AHandle,'DarkMode_Explorer', nil) zum Setzen einer dunklen Scrollbar bzw. SetWindowTheme(AHandle,'Explorer', nil); wenn es wieder die helle Version sein soll. AHandle ist dabei das Fensterhandle des Control (also z.B. einer TMemo-Instanz)

Man kann damit wohl auch noch über den letzten Parameter von SetWindowTheme genauer steuern, nur habe ich noch nicht herausgefunden, was da für Werte erwartet werden. Falls noch jemand Hinweise hat, wie man mögliche Werte für den zweiten Parameter bekommt (also das 'DarkMode_Explorer'), wäre ich auch sehr dankbar.

In meiner realen Anwendung funktioniert das alles bisher nun ganz gut und ich hab noch keine Probleme damit festgestellt.
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
198 Beiträge
 
Delphi 12 Athens
 
#7

AW: VCL Styles nur für einzelne Controls?

  Alt 15. Jan 2025, 18:24
Hallo,
verstehe ich das richtig, dass man für einzelene Controls einen anderen Style wählen kann?
Folgendes Problem: Ich habe im Projekt einen Style zugewisen z.B. Auric. Als StandardStil ist Windows eingestellt.
Nun möchte ich z.B. nur einem DBGrid den Style Auric zuweisen. Funktioniert auch in der Entwurfsansicht und kann unter Stylename zwischen Windows und Auric auswählen. Das Grid wird schwarz.

ABER: zur Laufzeit wird das Grid im Standard Windows Stil angezeigt.

Frage: Wie kann ich nun tun, damit auch zur Laufzeit das Grid in Auric dargestellt wird?
Hat jemand eine Lösung?

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.527 Beiträge
 
Delphi 12 Athens
 
#8

AW: VCL Styles nur für einzelne Controls?

  Alt 15. Jan 2025, 22:40
Als StandardStil ist Windows eingestellt.
Ich habe jetzt keine Referenz parat, aber soweit ich mich erinnere, funktioniert das Per-Control-Styling nur wenn der Standard-Style nicht Windows ist.

Frage: Wie kann ich nun tun, damit auch zur Laufzeit das Grid in Auric dargestellt wird?
Hat jemand eine Lösung?
Den Standard-Style auf Auric stellen und in allen Forms den StyleName auf Windows setzen. Alle Controls erben nun den Windows-Style vom Form, solange ihr StyleName leer bleibt. Beim Grid setzt man den halt wieder auf Auric.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
198 Beiträge
 
Delphi 12 Athens
 
#9

AW: VCL Styles nur für einzelne Controls?

  Alt 16. Jan 2025, 10:13
Hallo Uwe,

vielen Dank für die Information. Warum in der Entwurfsansicht sich das Design ändert und beim Ausführen sich wieder zurückstellt, finde ichn seltsam.
Dein Vorschlag funktioniert zwar, aber alle ca. 75 Forms auf Windows einzustellen ist ja aufwendiger als nur die eine betreffende Komponente auf das gewünschte Design zu setzen.

Insgesamt von meiner Seite aus betrachtet, ist das mit den Designs noch nicht richtig ausgereift. Ich habe auch beim Schließen der Anwendung MemoryLeak wenn ich vorher von einem anderen Design zurück zu Windows schalte. Die Umschaltung erfolgt aus einer Form Dialog in einer MDI Anwendung.

Außerdem habe ich seitdem (keine Ahnung ob damit ein Zusammenhang besteht) eine Viruswarnung vom Windows Defender, der kurzerhand die Anwendung löscht bzw. in die Quarantäne schickt.

Nach Stunden an Arbeit lasse ich lieber die Finger davon auf einstellbares Design umzustellen.

LG Harry
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.000 Beiträge
 
Delphi 12 Athens
 
#10

AW: VCL Styles nur für einzelne Controls?

  Alt 18. Jan 2025, 10:13
Hallo,

es gab tatsächlich mal Crahses beim zurückstellen auf den Standard Windows Stil.
99% davon wurden in 12.2 behoben. Ich hab' jetzt nur npoch einen übrig und der tritt bei
mir nur beim Beenden meiner Anwendung auf und auch nur intern, d.h. der Anwender dürfte
den nicht sehen.

Da bin ich ehrlicherweise aber EMBT auch noch einen von denen gewünschten test schuldig.
Muss ich mal die Zeit dafür finden.

Andere Bugs beim Stilumschalten wurden inzwischen behoben.

Bist du schon auf 12.2?
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:48 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 by Thomas Breitkreuz