Delphi/Lazarus: Schrift und Farbe von Menü oder PopupMenü ändern
Frage von Abensberger | 21.08.2017 um 14:24
Ich würde gerne das Aussehen der Menü-Items von meinem MainMenu und einem PopupMenu ändern. Leider haben weder das Menü selber noch die MenüItems eine Eigenschaft Font, um Einfluss auf das Erscheinungsbild zu nehmen.
Hat jemand eine Idee, wie ich den Style trotzdem ändern kann?
Ähnliche Themen
Delphi/Lazarus: Lesbare Schriftfarbe für beliebige Hintergrund-Farbe
Tipp | 0 Kommentare
VirtualBox: Datum und Uhrzeit ändern
Tutorial | 10 Kommentare
Delphi/Lazarus: Link zu einer Website in einer Anwendung setzen
Tutorial | 0 Kommentare
SchriftDrucker druckt nicht alle Schriften - Was kann ich tun?
Artikel | 0 Kommentare
Pipette: Beliebige Farben von überall auf dem Bildschirm aufnehmen
Tutorial | 1 Kommentar
Delphi/Lazarus: Kommandozeilen Parameter Tutorial Teil 1: Senden
Tutorial | 0 Kommentare
Schriftarten für Windows, Linux und Mac im Web
Artikel | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Um die Schrift, die Farbe oder den Hintergrund vom TPopupMenu oder TMainMenu zu ändern, musst du die entsprechenden Items selber zeichnen.
Als erstes musst du die Eigenschaft "OwnerDraw" vom betreffenden PopupMenu oder MainMenu auf "true" setzen. Das kannst du auch einfach über den Object Inspector machen.
Als nächstes musst du dich um das Zeichnen kümmern, das in der Prozedur OnDrawItem von jedem einzelnen TMenuItem durchgeführt wird. Dafür markierst du alle deiner Items nacheinander und machst jeweils einen Doppelklick auf das OnDrawItem-Event (du kannst natürlich auch jedem Item dieselbe Prozedur zuweisen, wenn alle Items gleich gezeichnet werden sollen). Die Prozedur gibt uns einen Zugang zu dem Canvas (hier mit der Variable ACanvas) jedes Items, auf den wir alles zeichnen und schreiben können, was wir möchten:
In diesem Beispiel ändern wir die Schriftart auf Consolas in Fett, Schriftgröße 14 und gelber Farbe mit einem schwarzen Hintergrund. Als Caption benutzen wir den String, der in der Eigenschaft "Caption" des MenuItems gespeichert steht und verwenden TextOut um den Text auf den Canvas zu schreiben. Natürlich können wir an dieser Stelle auch jeden einen Text hardcoden oder aus einer anderen Quelle beziehen.
Zusätzlich werden wir vermutlich die Prozedur OnMeasureItem jedes MenuItems benötigen. Diese Funktion teilt dem System mit, wie groß das MenuItem sein soll. Hier ist ein Beispiel:
Die Prozedur stellt uns die Variablen Width und Height für das Item zur Verfügung, die wir auf jeden beliebigen Wert ändern können. In unserem Beispiel berechnen wir mit ACanvas.TextWidth und ACanvas.TextHeight (wir bekommen an dieser Stelle wieder den Canvas des Items mitgeliefert) die benötigte Breite und Höhe für den Text, sodass der Text genug Platz zur Verfügung hat. Natürlich können wir an dieser Stelle auch wieder einen festen Wert setzen oder eine andere Berechnung durchführen.
21.08.2017 um 15:39