Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü? (https://www.delphipraxis.net/135015-delphi-2009-update-3-andere-verhalten-von-popup-menue.html)

Bbommel 3. Jun 2009 09:32


Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Hallo zusammen,

nach dem Einspielen des neuen Update 3 für D2009 habe ich in einem Projekt ein für mich ziemlich großes Problem festgestellt:

Ich zeichne verschiedene Objekte und lasse diese mittels einer TPaintBox ausgeben. Diese Paintbox hat ein "OnMouseMove"-Ereignis, um herauszufinden, ob sich die Maus gerade über einem bestimmten Objekt befindet, mit dem der Benutzer dann was anstellen kann.

Zum Beispiel kann er folgendes machen: Er kann die rechte Maustaste drücken, so dass sich ein Popup-Menü öffnet, in dem er für dieses Objekt unterschiedliche Aktionen auswählen kann. Diese Aktionen müssen dann natürlich wissen, mit welchem Objekt sie etwas machen sollen. Bisher war das auch kein Problem, denn vor dem Erscheinen des Popup-Menü wurde ja durch das OnMouseMove festgestellt, über welchem Objekt man sich befindet und wenn das Popup-Menü einmal erschienen war, wurde auch kein OnMouseMove-Event mehr ausgelöst bis das OnClick-Event für den Menü-Punkt ausgeführt war. Insofern konnte sich also die Aktion hinter dem OnClick darauf verlassen, dass das gerade aktuelle Objekt dasjenige ist, mit dem sie etwas anstellen muss.

Das alles funktioniert seit D2009 Update 3 nicht mehr: Jetzt wird NACH einem Klicken auf den Menüpunkt im Popup-Menü und VOR dem Ausführen des OnClick-Events des Menüpunktes noch einmal ein OnMouseMove der drunterliegenden PaintBox ausgeführt. Das ist natürlich fatal, denn um den Menüpunkt auszuwählen muss der Benutzer natürlich die Maus bewegen, die sich somit nicht mehr über dem eigentlichen Objekt befindet, wodurch die auszuführende Aktion nun das falsche Objekt bearbeitet. Aua. ;)

Ich konnte das Verhalten auf zwei Rechnern mit dem Update 3 reproduzieren und auf einem dritten Rechner, auf dem das Update noch nicht installiert war, trat das Problem nicht auf. Das Update ist also ziemlich sicher die Ursache.

Nun hab ich durchaus Ideen, wie ich um diesen Effekt drumrum programmieren kann, dass ist also nicht meine Frage - da werden mir wohl ein paar Stündchen nervige Fleißarbeit bevorstehen. :(

Die Frage ist eher: Hat irgendwer eine Ahnung, wie es zu dieser Änderung gekommen ist? In den Änderungslisten vom Update 3 habe ich zu dem Thema nichts gefunden (hatte nach TMenu und TPopupMenu gesucht, auch mal ohne "T"). Oder hat jemand genug Durchblick, um im Quellcode der Unit "menus" rauszufinden, ob etwas geändert wurde? Oder kommt der Effekt durch eine Änderung an einer ganz anderen Stelle und ich suche völlig falsch?

Bin hier für Hinweise dankbar. Vielleicht gibt es ja eine einfachere Möglichkeit, diesen Effekt wieder abzustellen als alles zu überarbeiten. Außerdem will ich wenigstens verstehen, warum mir so ein Update gerade mein Programm zerschossen hat. ;)

Bin für Hinweise sehr dankbar.

Bis denn
Bommel

Gausi 3. Jun 2009 09:50

Re: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Ein Popup-Menü hat doch das Event OnPopup. Wenn du dort das per OnMouseMove bestimmte Control in einer weiteren Variable speicherst und diese dann zur Bestimmung der Aktion nach einem Item-Klick nimmst, und nicht das, was das jetzt zusätzlich gefeuerte OnMouseMove dir liefert, sollte das Problem doch recht schnell erledigt sein.

Bbommel 3. Jun 2009 10:15

Re: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Jo, schon klar, aber das war ja letztlich nicht meine Frage. :) Wobei es so einfach bei mir auch nicht ist, weil es in meinem Fall um ca. 10 Popup-Menüs geht, die unterschiedlichen PaintBoxen zugeordnet sind, welche aber wiederum alle auf dem gleichen Frame basieren. Insofern werde ich das Objekt wohl eher im OnMouseDown-Ereignis der Paintbox des Frames speichern als im OnPopup-Ereignis des Menüs.

Soweit auch kein Problem - nur muss ich dann eben viele, viele Befehle anpassen, damit sie sich zukünftig auf dieses zwischengespeicherte Objekt beziehen und eben nicht mehr auf eins, das gerade aktuell ist.

Auch das ist ja letztlich kein Problem, sondern nur fiese Arbeit, und daher würde ich einfach auch gerne mal verstehen, warum das geändert wurde.

Bis denn
Bommel

Georgius Agricola 6. Apr 2010 12:25

Re: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Hallo Bommel,

ich habe das gleiche Problem wie von Dir beschrieben - zusätzliches MouseMove-Ereignis nach Klick auf einen PopupMenu-Eintrag "versaut" mir die Mausposition, von der das Menu aufgerufen wurde.

Auch ich bin schon drauf und dran gewesen, einen Workaround zu entwickeln. Auch durch Deinen Beitrag ist bei mir aber die Erkenntnis (und Hoffnung?) gereift, dass das so von Embarcadero nicht gewollt war und möglicherweise korrigiert wird oder wurde (habe noch kein Delphi 2010, nur 2009). Ich müsste den Workaround an vielen Stellen in mehreren Anwendungen einbauen. Gibt es inzwischen schon Erkenntnisse, ob das Problem so bestehen bleibt oder vielleicht bei Delphi 2010 wieder "zurückkorrigiert" wurde?

Danke der Hilfe und Grüße aus Sachsen,
Georgius.

Bbommel 7. Apr 2010 09:23

Re: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Hi,

von mir gibt es leider keine neuen Erkenntnisse. Ich hab mir den hier beschriebenen Workaround gebastelt, mich einmal drüber geärgert, dass das nötig war und jetzt lebe ich eigentlich ganz gut damit. Ich habe aber auch nur Delphi 2009, aber auch in weiteren Updates kein anderes Verhalten in der Hinsicht mehr bemerkt.

Vielleicht kann ja mal jemand mit D2010 einen kurzen Test machen?

Bis denn
Bommel

wicht 7. Apr 2010 10:37

Re: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Gerade kein Delphi da, aber hilft eventuell PopupPoint (Eigenschaft des Popup-Menüs) weiter?

Norris 21. Mai 2011 13:58

AW: Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?
 
Hallo,

ich denke das es mit CodeGear QC Issue 77410 zusammenhängt (http://qc.embarcadero.com/wc/qcmain.aspx?d=77410).
Die haben in Update 3 Message processing ein Bisschen geändert - die Maus-erreignisse werden bevorzugt (was eigentlich, meine meinung nach nicht richtig ist).

-N


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz