Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Matthias_001 am Mai 04, 2021, 13:15:01

Titel: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: Matthias_001 am Mai 04, 2021, 13:15:01
Hallo an Alle,

gibt es in VBA eine Möglichkeit abzufragen über welcher Befehlsschaltfläche sich der Mauszeiger befindet, bzw. ob sich der Mauszeiger über einer bestimmten Befehlsschaltfläche befindet?!
Das Ereignis an sich "onMouseMove" nützt hier leider nicht.
Ich könnte dann zwar eine Variable nutzen aber selbst die Rücksetzung lässt sich ja dann nicht über ein (nicht vorhandenes) onMouseLeave realisieren.

Hoffe auf Eure Unterstützung, danke.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: DF6GL am Mai 04, 2021, 14:12:57
Hallo,

ein Form und auch die dessen Unterbereiche haben ein MouseMove-Ereignis.


Für welchen Zweck benötigst Du dieses? Wer benötigt die Info, wo der Mauszeiger aktuell steht?

(Wenn der Mauszeiger nicht bewegt wird, tut sich ja nichts , von evtl. Tastatureingaben abgesehen. Es könnte nur der Formular-Timer einen Schuß abgeben....)



Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: Matthias_001 am Mai 04, 2021, 15:49:14
... es gibt in meinem Formular Pflichtfelder die zwingend, bevor der Focus sich auf verschieben lässt, mit plausiblen Werten beschrieben werden müssen.
Die Überprüfung der PLAUSI-Prüfung usw. stoße ich an mit dem EXIT- Ereignis des jeweiligen Pflichtfeldes an.
Das Feld kann dann nicht verlassen werden ehe korrekte Werte eingetragen sind...
Dumm ist aber, dass ich dann auch zB. den "Abbrechen-Button" und andere gebrauchte Steuerelemente nicht mehr erreiche.
Da das Exit/ Beenden- Ereigniss aber vor jedem Ereigniss liegt welches ich mit Mausklick auslösen kann, kann ich das Ganze nicht umschiffen.
Die Idee war nun in dem EXIT- Ereigniss zu prüfen ob die Maus beim Versuch des Verlassens über eben diesen "Abbrechnen- Button" ist....denn da onMouseMove Ereigniss löst ja aus.

Also schön wäre
- ... ist der Mauszeiger über dem Steuerelement xyz
- über welchem Steuerelement befindet sich der Mauszeiger

Vielleicht bzw. sicher gibt es andere Wege wie zB. die PLAUSI- Prüfung nach Focusverschiebung abzufragen... hat jetzt aber auch ein bisschen den akademischen Ergeiz geweckt.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: DF6GL am Mai 04, 2021, 16:56:30
Hallo,

versuch Dich am BeforeUpdate-Ereignis der betroffenen Textfelder.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: Matthias_001 am Mai 04, 2021, 17:12:55
... tritt das BeforeUpdate- Ereigniss nicht vor dem Beenden- Ereigniss auf?
Ich möchte/ muss ja während des gewählten Ereigniss wissen (und auswerten) ob der Abbrechen-Button gedrückt wurde.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: DF6GL am Mai 04, 2021, 17:42:08
Hallo,

welches "Beenden"-Ereignis?


Das BeforeUpdate-Ereignis gibt es für (fast)jedes Steuerelement genauso wie für ein Formular.


Zitatwährend des gewählten Ereigniss wissen (und auswerten) ob der Abbrechen-Button gedrückt wurde.

Was macht dieser Button (Code?) ?

Wenn  der Button gedrückt (angeklickt) wird, dann tritt das Klick-Ereignis dieses Buttons auf. Dort kann dann zielführend reagiert werden, z. B. mit (mehreren) Me.Undo die vorherigen Eingaben "weggeworfen" werden, entspr. dem Drücken der Esc-Taste.


Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: Matthias_001 am Mai 04, 2021, 18:52:07
Hallo Franz,

ich versuche nochmal ein wenig besser und vereinfacht zu erklären.
Es gibt ein Textfeld, hier muss eine gültige, bestehende Vertragsnummer eingegeben werden.
Nur wenn diese Vertragsnummer gültig und vorhanden ist kann mann dieses Textfeld verlassen um zum zB. Änderungen in allen anderen Feldern vorzunehmen etc.
Nun gibt es in dem Formular aber auch einen Beenden- Button.
Wenn dieser mit der Maus geklickt wird soll das Formular nach speichern/ abbrechen Rückfrage geschlossen werden.
Ich könnte nun beim anklicken aller übrigen Felder abfragen ob die Vertragsnummer korrekt ist. Wenn "Nein" wieder Focus zurück.
Oder aber meine "Idee" ich nutze das EXIT- Ereigniss des Vertragsnummernfeldes und setze Cancel= true wenn kein ordentlicher Eintrag erfolgt ist. Das klappt super, bis auf die Tatsache, dass ich den Beenden- Button dann auch nicht mehr erreiche.
Dein Vorschlag mit dem BeforeUpdate fällt somit hier auch aus....

Also bleibt nur die umständliche Variante? ca. 75 Felde bei GotFocus abzufragen ob im ursprünglichen Eingabefeld eine korrekte Vetragsnummer steht?
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: markusxy am Mai 05, 2021, 07:36:06
Zitat von: Matthias_001 am Mai 04, 2021, 18:52:07Also bleibt nur die umständliche Variante?

Eine Alternative:

Statt einem Textfeld wird ein Kombifeld verwendet.
Darin befinden sich alle Vertragsnummern, die im aktuellen Kontext möglich sind.
Dann brauchst du keine Prüfung, weil keine falsche Nummer eingegeben werden kann.

Ansonsten mit BeforeUpdate.
Da würde ich einfach die User-Eingabe bei Ungültigkeit löschen, dann gibts auch kein Problem.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: DF6GL am Mai 06, 2021, 16:19:28
Hallo,

ZitatDein Vorschlag mit dem BeforeUpdate fällt somit hier auch aus....

wenn Du Dich da mal nicht irrst...

Es sollte reichen, im Form_BeforeUpdate-Ereignis den Feldinhalt auf Plausibilität zu prüfen.


Allenfalls könnte man im BeforeUpdate-Ereignis des Feldes die Plausi-Prüfung wiederholen.


Das hat mit dem Speichern/Abbrechen-Button zunächst nichts zu tun.


Wenn "Speichern" gewählt wird, greift das Form-BeforeUpdate-Ereignis und checkt die Plausi der/der Feldes/er. Dabei kann Cancel = True  und der Fokus auf das geprüfte Feld gesetzt werden.


Die Exit/LostFocus, bzw. Enter/GotFocus-Ereignisse sind allesamt hier überflüssig.

Wenn "Abbrechen" gewählt wird, müssen eh alle getätigten Eingaben zurückgesetzt werden (oder was soll "Abbrechen" heißen?).  Das kann z. B. mit mehreren Me.Undo geschehen.
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: Matthias_001 am Mai 07, 2021, 16:48:53
Hallo Franz,

mag sein, dass ich zu umständlich denke oder ich Dich nicht richtig verstehe.

Auf das Einfachste runtergebrochen:
Kann ich in einem Ereigniss eines Textfeldes (hier das "beim verlassen"- Ereigniss) prüfen ob dieses Ereigniss durch einen Mausklick auf eine bestimmte Schaltfläche ausgelöst/ angeschoben wurde und in Abhängigkeit davon das dann ausgelöste Verlassen- Ereigniss beeinflussen (cance true/ false) ?
Titel: Re: Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet
Beitrag von: PhilS am Mai 07, 2021, 17:44:55
Ich finde das generelle Konzept viel zu kompliziert und den Ansatz mit dem Mausklick nicht benutzerfreundlich. - Was ist wenn der Benutzer nicht die Maus benutzt? Das ist i.d.R. bei der Dateneingabe viel effizienter, von Menschen die eine Maus nicht bedienen können will ich gar nicht erst anfangen.

Ich würde die Logik umdrehen:
Wenn der Benutzer eine gültige Nummer eingegeben hat, werden die ganzen übrigen Eingabefelder aktiv.
Fertig.