Flackernde Titel in Delphi-Programm mit „Theme“

Erstellt: 02.01.2022 Lesedauer 1 - 2 Min.

Eines der nutzlosesten Fähigkeiten von Windows: Anpassbare Themen für Programme. Sie stellen keinen funktionalen Vorteil dar, was der Beliebtheit keinen Abbruch tut.

Was „mal fix eingestellt“ wird, ist aus Sicht des Betriebssystems sowie der Entwicklung ziemlich aufwändig. Vor allem eröffnet sich ein Füllhorn an Möglichkeiten für Probleme.

Eins ist mir eher zufällig auf die Füße gefallen: In einer Anwendung starteten die Titel von Feldern („TLabel“) wildes Flackern, sobald die Maus über den Rollbalken eines mehrzeiligen Eingabefeldes („TMemo“) kam. Die Suche gestaltete sich kompliziert, der Effekt trat explizit nur mit „Themen“ auf. Das normale Windows-Design hatte keine Schwierigkeiten.

Das Video ist als Beitrag für stack overflow als Videolink zu Youtube entstanden, deshalb „Englisch“

Es kostete mehrere Stunden, bis ich dem Problem durch zerlegen des Programms in Einzelteile auf die Schliche kam, der Effekt hing von mehreren Bedingungen ab:

  1. Sowohl das „TMemo“ als auch die „TLabel(edEdit)“-Komponenten befanden sich auf einem „PageControl“
  2. Eine „TLabel(edEdit)-Komponente war sowohl links als auch rechts verankert (akLeft, akRight), weil es mit dem PageControl „dehnbar“ sein sollte.
  3. Die Maus muss sich über einem sichtbaren Rollbalken des „TMemo“ auf der gleichen Seite befinden.

Die Lösung ist sehr profan – das „drauf kommen“ umso kniffliger:

Lösungsvariante 1

Auf einem PageControl auf das beidseitige Verankern von Titel-behafteten Elementen verzichten.

Lösungsvariante 2

Das oder die Memo-Felder in ein „Panel“ legen – das entkoppelt offenbar die Komponenten so voneinander, dass es kein Geflickere gibt.

Es liegt – mutmaßlich – am Nachzeichnen von Titeln auf der Seite des „PageControl“-Elements, wenn die Maus über dem Rollbalken eines „TMemo“ auf der gleichen Strukturebene mit den Titeln steht. Warum deshalb die Titel neu gezeichnet werden ist unklar. Das „Panel“ verschiebt das „TMemo“ auf eine andere Ebene – das reicht.

Wer es selbst ausprobieren will:

Das Beispielprogramm aus dem Video kann als ZIP-Datei zum selbst ausprobieren herunter geladen werden. Es ist mit Delphi 11 „Alexandria“ erstellt und könnte womöglich mit älteren Versionen funktionieren (keine Gewähr).

Der Effekt wird nur sichtbar, wenn ein „Erscheinungsbild“ (Theme) ≠ „Windows“ in den Projekt-Optionen eingestellt wird.