Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zusätzlicher Button in Titelleiste?
galagher - Mo 25.01.21 10:47
Titel: Zusätzlicher Button in Titelleiste?
Hallo!
Ich möchte gern einen Button in der Titelleiste der Form haben, den man auch anklicken können muss.
Zwar gibt es bei den Jedi's eine Komponente - TCaptionBarButton (oder so ähnlich), die hat aber zwei unschöne Bugs: 1. macht sie den Fenstertitel (Caption) zunächst unsichtbar, 2. zeichnet sie die Titelleiste völlig neu ohne Rücksicht auf ein Windows-Theme.
Wie erhalte ich Zugriff auf die Titelleiste eines Fensters und wie setze ich da einen Button drauf?
lg
galagher
jaenicke - Mo 25.01.21 15:26
Ab Delphi 10.4 kannst du eine Komponente TTitleBarPanel auf das Formular legen und der Eigenschaft CustomTitleBar des Formulars als Control zuweisen. Dann musst du CustomTitlebar.Enabled noch auf True setzen und kannst dann in dieser Komponente Buttons hinzufügen usw., was viel besser funktioniert als die ganzen externen Komponenten, die ich kenne.
Im OnPaint kannst du dann dort ein Bild hinein kopieren oder etwas anderes zeichnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm121.TitleBarPanel1CustomButtons0Paint(Sender: TObject); var CurrentButton: TSystemTitlebarButton; begin CurrentButton := Sender as TSystemTitlebarButton; CurrentButton.Canvas.MoveTo(0, 0); CurrentButton.Canvas.LineTo(30, 30); end; |
galagher - Di 26.01.21 07:35
jaenicke hat folgendes geschrieben : |
Ab Delphi 10.4 kannst du eine Komponente TTitleBarPanel auf das Formular legen |
Ich habe nicht vor, jährlich eine neue Delphiversion zu installieren. Ich benutze Delphi 10.1, das reicht für meine Hobbyzwecke völlig.
Im Internet gibt es ja etwas zu dem Thema. Ist einiges an Code, der Button liegt dann aber leider unter der Titelleiste des Fensters. Will man ihn darauf haben, muss man dann wohl die Titelleiste neu zeichnen, dabei kann man aber ein eventuelles Windows-Theme nicht berücksichtigen, daher sieht das Ganze schon mal anders aus - das gleiche also, wie bei der besagten Jedi-Komponente.
Ich werde also einen einfachen, normalen Button verwenden!
jaenicke - Di 26.01.21 09:57
galagher hat folgendes geschrieben : |
Im Internet gibt es ja etwas zu dem Thema. Ist einiges an Code, der Button liegt dann aber leider unter der Titelleiste des Fensters. Will man ihn darauf haben, muss man dann wohl die Titelleiste neu zeichnen, dabei kann man aber ein eventuelles Windows-Theme nicht berücksichtigen, daher sieht das Ganze schon mal anders aus - das gleiche also, wie bei der besagten Jedi-Komponente. |
Wenn ich den Quelltext richtig verstehe (habe ihn nur ganz kurz überflogen), wird in der Delphi-eigenen Komponente der Rest der Titelleiste nicht selbst gezeichnet. Für zusätzliche Systembuttons z.B. wird das Theming je nach Windowsversion angewendet.
galagher hat folgendes geschrieben : |
Ich habe nicht vor, jährlich eine neue Delphiversion zu installieren. Ich benutze Delphi 10.1, das reicht für meine Hobbyzwecke völlig. |
Die Community Edition gibt es noch gar nicht in Version 10.4, von daher kommt das aktuell ohnehin nicht in Frage.
galagher - Di 26.01.21 10:37
jaenicke hat folgendes geschrieben : |
Wenn ich den Quelltext richtig verstehe (habe ihn nur ganz kurz überflogen), wird in der Delphi-eigenen Komponente der Rest der Titelleiste nicht selbst gezeichnet. Für zusätzliche Systembuttons z.B. wird das Theming je nach Windowsversion angewendet. |
Es muss ja kein Button sein, ein Bitmap oder TImage reichen mir schon, solange ich auch darauf zugreifen kann (OnClick usw.). Nur: Wie komme ich an die Titelleiste ran? Wie zeichne ich dort etwas?
jaenicke - Di 26.01.21 12:26
galagher hat folgendes geschrieben : |
Nur: Wie komme ich an die Titelleiste ran? Wie zeichne ich dort etwas? |
Im Quelltext habe ich nun gesehen, dass dort doch Funktionen verwendet werden um das Icon und den Text usw. zu zeichnen. Dort wird der normale Canvas des Formulars verwendet. Damit alles richtig aussieht, wird der TStyleManager.SystemStyle verwendet.
Es sieht aber auch wirklich genau wie im Original aus...
Was da ansonsten noch genau passiert, weiß ich aber nicht. Dafür habe ich gerade leider keine Zeit.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!