Unterstützung durch VCL-Stile für High-DPI-Grafik

Aus RAD Studio
Wechseln zu: Navigation, Suche

In RAD Studio 10.4 wurde die Architektur der VCL-Stile zur Unterstützung von High-DPI-Grafik und 4K-Monitoren wesentlich erweitert.

In früheren Versionen von RAD Studio wurde ein einzelnes Bild für alle grafischen Elemente eines Stils und spezifische Informationen zu den Größen der Elemente verwendet.

Jetzt werden alle grafischen Elemente automatisch für die richtige Auflösung des Monitors skaliert, auf dem das Element angezeigt wird. Das bedeutet, dass die Skalierung von der DPI-Auflösung des Zielcomputers bzw. des aktuellen Monitors bei Mehrmonitorsystemen abhängt.

Mit dem Stil-Designer können jetzt weitere Bilder für bestimmte Objekte und verschiedene Auflösungen einbezogen werden.

Für die Namen der neuen Elemente wird die Konvention "Name des Objekts + DPI-Information" verwendet, mit einem Unterstrich zwischen dem Namen und der Größeninformation im folgenden Format:

  • [Name]_15x (für 150% DPI)
  • [Name]_20x (für 200% DPI)

RAD Studio 10.4 fügt nur Elemente für 150% und 200% DPI für die meisten der im Produkt vorhandenen VCL-Stile hinzu.

Ein VCL-Stil (*.vsf-Datei) enthält jetzt zusätzliche 1,5- und 2-fache Grafiken für Elemente mit festen Größen, wie Pfeile, DB-Navigator-Symbole usw., die skaliert werden müssen.

Die Objekthierarchie eines Stils enthält zusätzliche Elemente, die mit High-DPI-Grafiken verknüpft sind.

Bitmap Style Designer.png

Folgende Elemente eines Stils unterstützen die Skalierung mit mehreren Stilbildern:

  • Form: Schaltflächen in der Titelleiste
  • CheckBox: Glyphe
  • RadioButton: Glyphe
  • ScrollBar: Pfeile
  • ComboBox: Schaltflächenpfeil
  • TrackBar: Elemente
  • ControlBar: Ziehelement
  • StatusBar: Ziehelement
  • CategoryPanels: Chevron
  • CategoryButtons: Chevron
  • DBNavigator: Schaltflächensymbole
  • DBGrid: Cursorsymbole
  • MediaPlayer: Schaltflächensymbole
  • SearchEdit: Symbole

Die Versionseigenschaft der aktualisierten High-DPI-Stile ist 2.0. Siehe die Eigenschaften des Stammobjekts im Bitmap-Stil-Designer:

Bitmap style designer objects.png

Hinweis: VCL-Stile für High DPI werden in Versionen von RAD Studio unter 10.4 nicht korrekt dargestellt. Der Bitmap-Stil-Designer wurde für Elemente mit unterschiedlichen DPI verbessert.

Die VCL-Stile mit Unterstützung für High DPI werden im Abschnitt "Für High DPI optimiert" der Stilliste im Dialogfeld "Projektoptionen" angezeigt:

VCL Styles.png

Änderungen der Stil-API

Die Stil-API wurde vollständig überarbeitet, damit Elemente automatisch auf jede DPI skaliert werden können, wobei das Element mit dem optimalen DPI-Wert als Quelle dient. Zum Beispiel: Arrow_20x für 175% DPI.

Die Stil-API verfügt jetzt über eine Skalierungsfunktion, die automatisch Elemente für die Skalierung erkennt. Diese Funktion kann für alte Stile (ohne High-DPI-Elemente) und für neue VCL-Stile mit High-DPI-Unterstützung verwendet werden. Wenn ein VCL-Stil kein High-DPI-Element enthält, skaliert die Stil-API vorhandene Elemente. Alle Methoden verfügen jetzt über einen DPI-Parameter, der für die Verwendung mit Hook-Klassen im VCL-Stil vorgesehen ist.

Die High-DPI-Unterstützung wurde auch für Hook-Klassen im VCL-Stil mit Verbesserungen im Großteil des Codes hinzugefügt. Allen Zeichenmethoden und Methoden zum Erkennen von Systemmetriken wurde ein DPI-Parameter hinzugefügt. Insbesondere wurde die Klasse TFormStyleHook (Anwenden des VCL-Stils auf TCustomForm) umfassend überarbeitet.

Hinweis: Sie müssen die Option "Per Monitor V2" DPI-Unterstützung aktivieren, damit Ihre Anwendung auf High-DPI-Mehrmonitorsystemen (Windows 10) korrekt ausgeführt wird.

Neue High-DPI-Stile

In RAD Studio 10.4 wurde eine große Anzahl der VCL-Stile aktualisiert, um Unterstützung für den neuen High-DPI-Stilmodus zu bieten, einschließlich:

  • Aqua Light Slate
  • Glow
  • Iceberg Classico
  • Lavender Classico
  • Sky
  • Slate Classico
  • Tablet Dark
  • Tablet Light
  • Windows 10
  • Windows 10 Blue
  • Windows 10 Dark
  • Windows 10 Green
  • Windows 10 Purple
  • Windows 10 SlateGray

Stile auf Steuerelementebene

In der Vergangenheit konnten Entwickler in der VCL-Bibliothek einen Stil (oder keinen Stil) für die gesamte Anwendung auswählen.

Ab 10.4 ermöglicht die VCL-Bibliothek die gleichzeitige Verwendung mehrerer VCL-Stile in verschiedenen Teilen einer einzigen Anwendung und die Voreinstellung einiger Elemente auf das Plattformdesign.

Für verschiedene Formulare in einer Anwendung können unterschiedliche Stile verwendet werden, aber auch für verschiedene visuelle Steuerelemente auf demselben Formular.

Die neue Eigenschaft TControl.StyleName steuert dieses neue Feature anhand des Namens des Stils für das jeweilige Steuerelement. Das heißt, wenn die Eigenschaft leer ist, wird der Stil des übergeordneten Steuerelements verwendet.

Wie der Name schon sagt, ermöglichen es Stile auf Steuerelementebene einem Entwickler, unterschiedliche Stile für Steuerelemente und Formulare in derselben Anwendung anzuwenden. Zunächst müssen Sie Ihrer Anwendung mehrere Stile hinzufügen. Danach sind alle verfügbar. Dieses Feature funktioniert nur, wenn einer der VCL-Stile aktiv ist.

Hier ist ein Beispiel eines Formulars mit fünf Schaltflächen mit fünf unterschiedlichen Stilen:

Buttons.png

Für die Anpassung des Stils der Formulare und Steuerelemente einer VCL-Anwendung gibt es verschiedene Vorgehensweisen:

1. Passen Sie die Stilliste in den Projektoptionen an.

2. Verwenden Sie die Eigenschaft TControl.StyleName zum Definieren des jeweiligen Stils für jedes Steuerelement oder Formular. Der Wert von StyleName muss mit einem der Namen der Stile in den Projektoptionen übereinstimmen. Ein Steuerelement kann den für sein übergeordnetes Steuerelement definierten StyleName verwenden. Sie können also die Eigenschaft StyleName eines Formulars festlegen, damit alle Steuerelemente auf dem Formular einen bestimmten Stil verwenden.

Standardmäßig ist TControl.StyleName leer und Steuerelemente verwenden einen Standardstil. Sie können StyleName auf Windows festlegen, um die Anwendung eines Stils für Steuerelemente oder Formulare zu deaktivieren. Wenn Sie den Namen eines Stils angeben, der sich nicht in den geladenen VCL-Stilen befindet, dann erhält das Steuerelement den Standardstil.

3. Sie können einen bestimmten Stil für Standarddialogfelder definieren. Verwenden Sie dazu die Eigenschaft TStyleManager.DialogsStyleName. Die Eigenschaft ist standardmäßig leer und Standarddialogfelder verwenden den Stil der Anwendung.

4. Sie können den Anwendungsstil auf Windows festlegen. Wenn die Eigenschaft StyleName für einige Steuerelemente oder Formulare leer ist, wird in diesem Fall immer der Stil Windows verwendet und der VCL-Stil ist immer deaktiviert.

Um dieses Feature zu aktivieren, müssen Sie die Eigenschaft TStyleManager.UseSystemStyleAsDefault auf True setzen. Verwenden Sie diese Eigenschaft, wenn Sie VCL-Stile nur für einige Formulare aktivieren möchten, für die Sie die Eigenschaft StyleName festlegen. Beachten Sie aber, dass VCL-Stile in jedem Falle aktiv sein müssen.

Mit dem oben unter Punkt 4 beschriebenen Mechanismus können Sie Komponenten von Drittherstellern verwenden, die keine VCL-Stile in mit Stilen versehenen Anwendungen unterstützen. Das konnte in der Vergangenheit nur sehr aufwändig erreicht werden. Die neue Architektur ermöglicht die Kombination von Steuerelementen und Formularen mit und ohne Stile, sodass Sie die Steuerelemente von Drittanbietern nutzen können, ohne auf VCL-Stile verzichten zu müssen.

Hinweis: Das Zuweisen von Stilen pro Steuerelement wird nicht automatisch für Steuerelemente von Drittherstellern angewendet. Dazu müssen Sie Quelltext aus der Methode Vcl.Themes.StyleServices mit dem Parameter TControl verwenden. Zum Beispiel: StyleServices(Self).DrawElement.

Verbesserung der Leistung von Stilen

Zur Verbesserung der Leistung von VCL-Stilen wurde in RAD Studio 10.4 ein Bitmap-Puffer des Steuerelementbilds hinzugefügt, den untergeordnete Bilder zum Abrufen des übergeordneten Bildes verwenden können. Steuerelemente können Bildrechtecke aus diesem Puffer kopieren, anstatt das Zeichnen aller übergeordneten Steuerelemente aufzurufen. Ein häufiges Szenario, für das diese Optimierung hilfreich ist, sind mehrere TGroupBox-Steuerelemente mit TRadio-Steuerelementen in jedem.

Zum Aktivieren dieses Features können Sie TStyleManager.UseParentPaintBuffers auf True setzen.

Hinweis: Dieses Feature funktioniert nur, wenn ein VCL-Stil aktiv ist und eine erhebliche zusätzliche Menge an Speicher für die Speicherung von Bildern verwendet.