AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Delphi 2009 Update 3: Andere Verhalten von (Popup-)Menü?

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

Ein Thema von Bbommel · begonnen am 3. Jun 2009 · letzter Beitrag vom 21. Mai 2011
Antwort Antwort
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
588 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 3. Jun 2009, 09:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
746 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 3. Jun 2009, 09:50
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
588 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 3. Jun 2009, 10:15
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
  Mit Zitat antworten Zitat
Georgius Agricola

Registriert seit: 6. Apr 2010
Ort: Leipzig
1 Beiträge
 
Delphi 2009 Professional
 
#4

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

  Alt 6. Apr 2010, 12:25
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.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
588 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 7. Apr 2010, 09:23
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
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#6

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

  Alt 7. Apr 2010, 10:37
Gerade kein Delphi da, aber hilft eventuell PopupPoint (Eigenschaft des Popup-Menüs) weiter?
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Norris

Registriert seit: 21. Mai 2011
1 Beiträge
 
#7

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

  Alt 21. Mai 2011, 13:58
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf