Benutzerdefinierte Titelleiste für VCL-Formulare

Aus RAD Studio
Wechseln zu: Navigation, Suche

Übersicht

Mit der Eigenschaft TForm.CustomTitleBar und dem neuen Steuerelement TTitleBarPanel können Sie die native Titelleiste eines VCL-Formulars ähnlich wie bei Windows-Explorer, Google Chrome oder anderen Anwendungen anpassen. Sie können VCL-Steuerelemente auf der Titelleiste platzieren und benutzerdefiniertes Zeichnen in der Titelleiste ausführen sowie das standardmäßige Zeichnen von Elementen wie das Fenstersymbol und die Beschriftung steuern.

CustomTitleBarVCL.png

Hinweis: Die benutzerdefinierte Titelleiste wird ab Windows 7 unterstützt.

Die Unterstützung für die benutzerdefinierte Titelleiste verwendet die echte native Windows-Titelleiste und erfordert, dass DWM (Desktop Window Manager) aktiviert ist. Wenn Sie Aero in Windows 7 oder in Situationen deaktivieren, in denen der DWM nicht zum Rendern von Fenstern verwendet wird, wird die Anpassung der Titelleiste nicht unterstützt. Dies wird vom Steuerelement korrekt gehandhabt, aber um diese Situation in Ihrem Code zu überprüfen, prüfen Sie den Wert von TForm.CustomTitleBar.Supported. Dieser Wert ist True, wenn Sie die benutzerdefinierte Titelleiste verwenden können.

Um die volle Leistungsfähigkeit der benutzerdefinierten Titelleiste zu nutzen, müssen Sie eine Kombination der Eigenschaft TForm.CustomTitleBar und einem auf dem Formular platzierten TTitleBarPanel verwenden. TTitleBarPanel wird zum Hosten von VCL-Steuerelementen verwendet, aber es ist auch erforderlich, um erweiterte Funktionen, wie Anpassen das Zeichnens, zu unterstützen, selbst wenn sich in der Titelleiste keine benutzerdefinierten Steuerelemente befinden. Im Wesentlichen stellt die Eigenschaft TForm.CustomTitleBar die Einstellungen für die Titelleiste des Formulars dar und TTitleBarPanel ist ein VCL-Steuerelement, mit dem erweiterte Funktionen in der Titelleiste selbst repräsentiert werden und darauf zugegriffen wird.

Achtung: Nur die Plattform-VCL-Stile funktionieren in der Titelleiste.

Grundlegende Anpassung

Die Klasse VCL TForm hat eine neue Eigenschaft, CustomTitleBar. Damit können grundlegende Eigenschaften, wie die Anzeige des Titels oder Symbols geändert werden sowie die erweiterten Funktionen, darunter die Platzierung von Steuerelementen, gesteuert werden.

Setzen Sie TForm.CustomTitleBar.Enabled auf True, um die Anpassung der Titelleiste zu aktivieren. Beachten Sie, dass oben in Ihrem VCL-Formular im Designer jetzt ein schattierter blauer Bereich angezeigt wird. Dieser Bereich im Formular wird für die Titelleiste verwendet.

Position der VCL-Steuerelemente

Die Titelleiste wird mit der Funktion DwmExtendFrameIntoClientArea implementiert. Das bedeutet, dass es keinen Nicht-Client-Bereich im Formular gibt, und die Titelleiste sowohl im Client- als auch im Nicht-Client-Bereich gerendert wird, d. h. in dem Bereich, in dem Sie die VCL-Steuerelemente platzieren können. Dies wiederum heißt, dass die Titelleiste nicht mit anderen Steuerelementen kompatibel ist, die den Nicht-Client-Bereich verwenden, z. B. TMainMenu.

Alle dem Formular untergeordneten Steuerelemente mit einer Align-Eigenschaft, wie z. B. alTop, werden korrekt an den Bereich der Titelleiste angepasst. Jedes Steuerelement, das über die Eigenschaften Left und Top platziert wird, d. h. absolut positioniert ist, bleibt jedoch an der Stelle, an der es sich befindet, und kann daher die Titelleiste überlappen, sodass seine Position angepasst werden muss, wenn die benutzerdefinierte Titelleiste aktiviert ist.

Wir empfehlen, Steuerelemente im Formular auf einem am Client ausgerichteten TPanel zu platzieren. Beachten Sie, dass Sie möglicherweise auch die Eigenschaft Height des Formulars vergrößern sollten, um den Platz zu berücksichtigen, der zuvor von der Titelleiste verwendet wurde.

Einstellungen und teilweise benutzerdefinierte Farbgebung

Die folgenden Einstellungen steuern das Verhalten der Titelleiste sowie häufige Szenarien für die Farbgebung (wie etwa den Titel der Titelleiste ohne Farbe), mit denen Sie diese Szenarien berücksichtigen können, ohne eine vollständige benutzerdefinierte Farbgebung zu implementieren.

  • CaptionAlignment: Damit geben Sie an, wo der Titel gezeichnet werden soll. Windows 10 zeichnet standardmäßig links. Sie können den Titel zentriert, wie in Windows 8, oder rechtsbündig zeichnen.
  • Control: Legen Sie diese Eigenschaft auf ein TTitleBarPanel fest, das auf dem Formular platziert ist. Siehe den folgenden Abschnitt über benutzerdefinierte Steuerelemente in einer Titelleiste.
  • Enabled: Aktiviert oder deaktiviert die Verwendung der benutzerdefinierten Titelleiste.
  • Height: Höhe der Titelleiste in Pixel. Um die Höhe der Titelleiste zu ändern, deaktivieren Sie SystemHeight. Dadurch wird die Titelleiste auf die Standardhöhe des Systems beschränkt. Sie können die Eigenschaft Height auf einen beliebigen Wert festlegen.
  • ShowCaption: Steuert, ob der Titel gezeichnet wird.
  • ShowIcon: Steuert, ob das Symbol des Formulars an der linken Ecke der Titelleiste gezeichnet wird.
  • SystemHeight: Bei True hat die Höhe der Titelleiste immer den Wert, der auch von anderen Fenstern auf dem aktuellen Bildschirm verwendet wird. Um die Höhe der Titelleiste anzupassen, deaktivieren Sie SystemHeight und geben dann einen Wert für die Eigenschaft Height ein.
  • SystemColors: Steuert, ob für den aktiven oder inaktiven Status des Titels der Titelleiste und der Schaltflächen die Systemfarben oder benutzerdefinierte Farben verwendet werden. Das ist nützlich, wenn Sie die Titelleiste mit anderen Hinter- und Vordergrundfarben als denjenigen des Systems ohne vollständige benutzerdefinierte Farbgebung darstellen möchten.
Bei True erhalten der Hintergrund, der Titel und die Systemschaltflächen, wie andere Anwendungen, die Standardfarben des Systems. Bei False werden die Farben verwendet, die Sie in den Farbeigenschaften (siehe unten) angeben.
Damit benutzerdefinierte Farben verwendet werden, müssen Sie ein TTitleBarPanel auf dem Formular platzieren und die Eigenschaft CustomTitleBar.Control darauf festlegen, genau so, als ob Sie Steuerelemente in der Titelleiste zu platzieren wollten, auch wenn der Titelleistenbereich leer ist und keine Steuerelemente enthält.

Vollständige benutzerdefinierte Farbgebung

Sie können vollständig anpassen, wie die Titelleise gerendert wird, indem Sie die Titelleiste mit Farbe füllen und darauf zeichnen. Dazu müssen Sie ein TTitleBarPanel auf dem Formular platzieren und die Eigenschaft CustomTitleBar.Control darauf festlegen, genau so, als ob Sie Steuerelemente in der Titelleiste platzieren wollten, auch wenn der Titelleistenbereich leer ist und keine Steuerelemente enthält. Sie können dann eine Ereignisbehandlungsroutine für das Ereignis TTitleBarPanel.OnPaint erstellen.

Das Ereignis TTitleBarPanel.OnPaint wird als allerletzter Schritt bei der Farbgebung aufgerufen. Die Farbe wird über alles gelegt, was bereits in der Titelleiste mit Farbe versehen wurde, z. B. Beschriftungen oder Systemschaltflächen. Sie können zudem mit den Rect-Eigenschaften das Zeichnen anpassen. Mit den Eigenschaften IconRect, FrameRect, ClientRect und CaptionButtonsRect können Sie ermitteln, wo sich Systemschaltflächen, Titel usw. befinden.

Die Farbe ist eine 32-Bit-Oberfläche. Sie hat dieselben Anforderungen wie die Farbgebung auf Glas in Windows 7.

Titelschaltflächen

Sie können der Titelleiste Titelschaltflächen hinzufügen. Dies wird auch in der IDE verwendet, um die Schaltflächen "Hilfe" und "Desktop" links neben den Schaltflächen "Minimieren"/"Maximieren"/"Schließen" hinzuzufügen, die in der Regel in der Titelleiste angezeigt werden.

Platzieren Sie dazu ein TTitleBarPanel auf dem Formular und legen Sie es auf die Eigenschaft CustomTitleBar.Control des Formulars fest, wie oben beschrieben. Anschließend können Sie benutzerdefinierte Schaltflächen über die Eigenschaft CustomButtons von TTitleBarPanel hinzufügen. Diese Eigenschaft ist eine Sammlung von TCaptionButtonItem. Schaltflächen werden automatisch in der Reihenfolge von rechts nach links angeordnet, beginnend links von der Schaltfläche "Minimieren". Die 0. Schaltfläche in der Sammlung ist die äußerst rechte und die letzte Schaltfläche die äußerst linke. In Windows 7 befindet sich ein kleiner Zwischenraum zwischen der Schaltfläche "Minimieren" und der ersten benutzerdefinierten Schaltfläche.

Die Komponente TCaptionButtonItem repräsentiert eine Schaltfläche in der Titelleiste. Sie verfügt über die folgenden Eigenschaften:

  • ButtonType: ermöglicht die Verwendung einer Systemschaltfläche, wie "Schließen", "Minimieren" oder "Wiederherstellen", das Hinzufügen eines Zwischenraums oder einer vollständig benutzerdefinierten Schaltfläche. In der Regel verwenden Sie die benutzerdefinierte Schaltfläche.
  • Enabled: wenn deaktiviert, wird die Schaltfläche gezeichnet und reagiert nicht auf Mausbewegungen oder Klicks.
  • Hint: ermöglicht das Festlegen eines Kurzhinweises, der angezeigt werden soll, wenn die Maus über die Schaltfläche geführt wird.
  • Visible: steuert, ob die Schaltfläche in der Titelleiste angezeigt wird.
  • Width: legt die Breite des Steuerelements fest.
  • OnClick: eine Ereignisbehandlungsroutine für das Klicken auf die Schaltfläche.
  • OnPaint: eine Ereignisbehandlungsroutine zum Zeichnen auf der Schaltfläche, wie ein Schaltflächensymbol. Schaltflächen sind nicht mit einer Bilderliste verbunden.

Unterstützung für Windows 7 und 10

Die benutzerdefinierte Titelleiste unterstützt Windows 7 und Windows 10 vollständig, einschließlich der Titelschaltflächen:

TTitleBar.png

Die RAD Studio-Titelleiste unter Windows 7.

Hinweis:

Die Plattformen Windows Vista oder früher werden nicht unterstützt.

Die benutzerdefinierte Titelleiste wird unter Windows 8 unterstützt, es können aber optische Unterschiede im Vergleich zu anderen Anwendungen auftreten, etwa wie Systemschaltflächen mit Farbe gefüllt werden, wenn die Farben angepasst werden (sie werden wie Windows 10-Schaltflächen gerendert).

Benutzerdefinierte Steuerelemente

Mit dem Steuerelement TTitleBarPanel werden Steuerelemente im Titelleistenbereich auf dem VCL-Formular platziert. Es dient als Container, der beim Entwurf Unterstützung für die Steuerelemente bereitstellt. Außerdem stellt es eine Beziehung zwischen dem Formular und dem benutzerdefinierten Titelleistenbereich her.

In der Titelleiste platzierte Steuerelemente müssen das Zeichnen auf eine 32-Bit-Oberfläche unterstützen, wie auf Glas unter Windows 7. Als allgemeine Richtlinie gilt: Wenn ein Steuerelement auf Glas unter Windows 7 korrekt gerendert wird, wird es unter Windows 7 und 10 vermutlich korrekt in der Titelleiste angezeigt. Es kommt häufig vor, dass ein Steuerelement platziert wird und dann festgestellt wird, dass es nicht richtig gerendert wird, selbst im Designer. Möglicherweise müssen Sie Eigenschaften wie DoubleBuffered für normale VCL-Steuerelemente verwenden.

So platzieren Sie Steuerelemente in der Titelleiste:

  • Suchen Sie in der Palette das Steuerelement TTitleBarPanel und platzieren Sie es auf dem Formular. Es wird oben auf dem Formular angezeigt.
  • Legen Sie die Eigenschaft CustomTitleBar.Control des Formulars auf den Titelleistenbereich fest. Der Titelleistenbereich hat eine blaue Hintergrundfarbe und rechts werden Systemschaltflächen angezeigt.
  • Ändern Sie optional die Eigenschaft Height der Titelleiste, damit sie mit der Eigenschaft CustomTitleBar.Height übereinstimmt. Nur Steuerelemente, die sich innerhalb der Höhe der Titelleiste befinden, werden in der Titelleiste selbst gerendert.
  • Suchen Sie in der Palette ein Steuerelement, z. B. TEdit, und platzieren Sie es auf TTitleBarPanel mit diesen Einstellungen:
    • Legen Sie im Objektinspektor die Eigenschaftt DoubleBuffered des neuen Steuerelements auf True fest.
    • Da es sich bei TTitleBarPanel um ein normales VCL-Steuerelement handelt, können Sie Align, Anchors und andere Positionierungseigenschaften für darauf befindliche Steuerelemente festlegen. Damit das TEdit-Steuerelement rechts neben den Systemschaltflächen ausgerichtet wird, wie etwa für ein Sucheingabefeld, ziehen Sie es an die gewünschte Position und ändern Sie die Eigenschaft Anchors von akLeft in akRight.
VCL control.png
  • Fügen Sie dem Formular das Ereignis OnShow hinzu oder verwenden Sie OnResize, wenn Sie Steuerelemente manuell anstatt über Anker in der Titelleiste platzieren möchten. (Wir empfehlen die Verwendung der Ausrichtung und von Ankern, da die Positionierung über OnResize eine visuelle Verzögerung in Bezug auf die Fenstergröße erzeugen kann). Sie können sich auf die Eigenschaften IconRect, FrameRect, ClientRect und CaptionButtonsRect von CustomTitleBar beziehen, um Ihre Steuerelemente im Verhältnis zu bekannten Titelleistenelementen zu positionieren. Hier legen Sie die Eigenschaft Left des Eingabesteuerelements auf CaptionButtonsRect.Left minus der Breite für einen schmalen Rand (nur aus optischen Gründen) fest, indem Sie der Ereignisbehandlungsroutine die folgende Zeile hinzufügen:
 Edit1.Left := CustomTitleBar.CaptionButtonsRect.Left - Edit1.Width - 8;
TForm.png

Siehe auch