Einzelnen Beitrag anzeigen

StephanR

Registriert seit: 1. Mai 2018
6 Beiträge
 
#1

MenuItem neu zeichnen ohne ganzes Menü neu zu zeichnen

  Alt 1. Mai 2018, 11:51
Hallo DPler,

in meinem aktuellen Projekt muss ich während ein PopUpMenü bereits geöffnet ist und dargestellt wird den Caption mehrerer MenuItems ändern.
Die Änderung selbst ist weiters unproblematisch, allerdings löst das Ändern der Caption das Kommando MenuChanged(true) aus, welches dann das
ganze Menü neuzeichnet. Dabei wird aber bei jeder Änderung das PopUp geschlossen und neu geöffnet, was ganz nervig "flackert".
Ich habe daraufhin eine Childklasse erstellt (ThackedMenuItem) und darin die SetCaption-Funktion so überschrieben, dass ich MenuChanged blockieren kann.

Leider habe ich bislang keinen Weg gefunden, trotzdem das Neuzeichnen des jeweiligen MenuItem auszulösen (und nur dieses). Erst wenn der Nutzer mit der Maus darüberfährt wird über das Hover-Ereignis der Menüeintrag neu gezeichnet.

Gibt es irgend einen anderen Weg, das Neuzeichnen auch ohne Mausereignis auszulösen? Invalidate etc. gibt es ja leider nicht, da TMenuItem kein zeichenbares Control ist... Kann man Hover oder Mouseleave an ein MenuItem senden, so dass dann neu gezeichnet wird?

Alternativ habe ich versucht, in der SetCaption-Funktion die Routine DrawItem aufzurufen (ist OwnerDraw). Dabei habe ich es aber bislang nicht geschafft den dazugehörigen Canvas des Menüfensters zu ermitteln. Somit klappt das neu selber darüber zeichnen bislang nicht.

Es wäre toll, wenn Ihr für eine der beiden Varianten eine Lösung kennen solltet und diese hier posten könntet.

Vielen Dank
Stephan
  Mit Zitat antworten Zitat