So, letztlich habe ich mich für eine Variante entschieden. Zwischendurch war ja sogar die Idee, mittels transparenter
VCL-Form den ganzen Titlebar Bereich für Controls verfügbar zu machen. Das hab' ich verworfen.
Jetzt verwende ich eine eigene
NonVCL Fensterklasse, die quasi wie ein Button-Control reagiert. (War sowieso mal fällig, das ich über den Bereich auch mal was lerne). Wie mir hier gezeigt wurde, ist es nicht so trivial, 32/64bit in einen Topf zu werfen. Hab' mich letztlich für eine Kombination aus Procedure und globaler Var entschieden (innerhalb der
Unit im implemention Teil). Für mich geht das in Ordnung
Gegenüber der ersten Vorstellungen ein paar kleine Änderungen (hoffentlich Verbesserungen):
- MainForm-Caption wird nicht mehr verändert. Es wird nur noch die WindowProc gehooked. Wenn MainForm/Button-Caption gleich sind, reicht das zum abdecken. Womit auch MainFormOnTaskbar unangetastet bleiben kann (wegen Win7, blinken wichtig).
- Die runden Ecken des Vista-Button werden per Region gelöst, nicht mehr durch eine transparente Farbe. So gibt es auch keine Farbkollisionen.
- Wenn das MainForm nicht den Fokus hat, wechselt der Button seine Farbe in clInactiveCaption (abschaltbar)
- Wenn nicht im ClassicStyle, wird jetzt etwas weniger neugezeichnet. Bei ClassicStyle hab' ich es leider nicht hinbekommen, da ist das Filter zu viel Arbeit.
Mir bekannte Nachteile:
- Je nach System schwimmt der Button bei schnellem Fenster bewegen. Tritt aber nicht immer auf und ich finde, man sieht es nur, wenn man darauf achtet.
- Im ClassicStyle wird bei verkürzen des Caption-Textes der NC_Bereich verzögert aktualisiert. Für einen festen Caption-Text ist das zum Glück egal.
- Unter Win7 ist bei BorderStyle Single/Dialog der Button etwas vom Rand abgesetzt. Beseitige ich noch, mangels Win7 System nur etwas mühsam.
- ...und natürlich alles was ich übersehen habe
In der Anlage der aktuelle Source und wieder eine kleine App zum schnellen Testen.
Ich bin soweit zufrieden, zumal ich das nur für eine kleine mediale Anwendung im privaten Umfeld brauche.