Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fokus mit Mauszeiger wandern lassen

66 views
Skip to first unread message

Björn Benatzky

unread,
Oct 16, 2007, 12:10:02 AM10/16/07
to
Ich habe jetzt schon in mehreren Newsgroups gesucht und auch gegoogled,
aber ein wirklichen Lichtblick habe ich noch nicht entdecken können.
Ist es überhaupt möglich, den Fokus eines Listenfeldes mit dem Mauszeiger
mitwandern zu lassen, so daß man bestimmen kann, über welchem Datensatz sich
der Mauszeiger stets befindet?

Gruß
Björn

Jörg Ostendorp

unread,
Oct 16, 2007, 4:22:18 AM10/16/07
to
Hallo Björn,

als Anregung:

Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function GetCursorPos _
Lib "user32.dll" ( _
ByRef lpPoint As POINTAPI _
) As Long

Private Sub DeineListBox_MouseMove(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim pt As POINTAPI
Dim lng As Long
GetCursorPos pt
lng = Me!DeineListBox.accHitTest(pt.x, pt.y) - 1
Me!DeineListBox.Selected(lng) = True
'oder
Me.Caption = Me!DeineListBox.ItemData(lng)
'etc
End Sub


--
Grüßle vom Bodensee
Jörg Ostendorp

Access-FAQ: www.donkarl.com

André Minhorst

unread,
Oct 16, 2007, 4:22:58 AM10/16/07
to
Hallo Björn,

Björn Benatzky schrieb:

wozu soll das gut sein? Eigentlich reicht es doch, wenn man beim Klicken
auf einen Eintrag weiß, welcher das ist.

Ciao
André

--
http://www.access-entwicklerbuch.de
http://www.access-im-unternehmen.de

Björn Benatzky

unread,
Oct 16, 2007, 10:42:05 AM10/16/07
to

Sinn und Zweck ist folgender:
Die Einträge im Listenfeld sind länger als die Breite und somit nicht
vollständig sichtbar. Da beim Auswählen / Anklicken eines Eintrages eine
Aktion folgt, sollte der Eintrag vorher bekannt sein. Das Feld kann ich nicht
größer machen, also wäre vielleicht eine Idee der SteuerelementTipp, der aber
nur den ersten Eintrag zeigt, der den Focus hat. Okay?

André Minhorst

unread,
Oct 16, 2007, 1:37:23 PM10/16/07
to
Hallo Björn,

Björn Benatzky schrieb:
>> Björn Benatzky schrieb:
>>> Ich habe jetzt schon in mehreren Newsgroups gesucht und auch gegoogled,
>>> aber ein wirklichen Lichtblick habe ich noch nicht entdecken können.
>>> Ist es überhaupt möglich, den Fokus eines Listenfeldes mit dem Mauszeiger
>>> mitwandern zu lassen, so daß man bestimmen kann, über welchem Datensatz sich
>>> der Mauszeiger stets befindet?
>> wozu soll das gut sein? Eigentlich reicht es doch, wenn man beim Klicken
>> auf einen Eintrag weiß, welcher das ist.
>

> Sinn und Zweck ist folgender:
> Die Einträge im Listenfeld sind länger als die Breite und somit nicht
> vollständig sichtbar. Da beim Auswählen / Anklicken eines Eintrages eine
> Aktion folgt, sollte der Eintrag vorher bekannt sein. Das Feld kann ich nicht
> größer machen, also wäre vielleicht eine Idee der SteuerelementTipp, der aber
> nur den ersten Eintrag zeigt, der den Focus hat. Okay?

ist ein guter Ansatz, über den ich noch nicht nachgedacht habe. Danke
für die Anregung!

Jürgen Schulz

unread,
Oct 17, 2007, 7:02:30 AM10/17/07
to
>> wozu soll das gut sein? Eigentlich reicht es doch, wenn man beim Klicken
>> auf einen Eintrag weiß, welcher das ist.

> Sinn und Zweck ist folgender:


> Die Einträge im Listenfeld sind länger als die Breite und somit nicht
> vollständig sichtbar. Da beim Auswählen / Anklicken eines Eintrages eine
> Aktion folgt, sollte der Eintrag vorher bekannt sein. Das Feld kann ich
> nicht
> größer machen, also wäre vielleicht eine Idee der SteuerelementTipp, der
> aber
> nur den ersten Eintrag zeigt, der den Focus hat. Okay?

Ist es nicht einfacher mit dem Klick und Doppelklick Ereignis zu arbeiten?

Jürgen


André Minhorst

unread,
Oct 17, 2007, 8:02:56 AM10/17/07
to
Jürgen Schulz schrieb:

Mit dem Klick/Doppelklick will er ja andere Ereignisse auslösen. Aber
nicht, bevor er nicht den kompletten Inhalt der Zeile kennt. ;-)

Jürgen Schulz

unread,
Oct 18, 2007, 5:45:11 AM10/18/07
to

>> Ist es nicht einfacher mit dem Klick und Doppelklick Ereignis zu
>> arbeiten?
>
> Mit dem Klick/Doppelklick will er ja andere Ereignisse auslösen. Aber
> nicht, bevor er nicht den kompletten Inhalt der Zeile kennt. ;-)

Das was er wollte war mir schon klar.
Ich habe angenommen er wertet nur das Klick Ereignis aus.

Dann könnte er doch den Code vom Klick Ereignis in das DoppelKlick Ereignis
schreiben. Das Klick Ereignis wäre dann frei für die Vorschau...

Jürgen


Björn Benatzky

unread,
Oct 18, 2007, 8:56:00 AM10/18/07
to

Nee, sorry Jürgen, das Klick wie auch das Doppelklick Ereignis sind bereits
belegt:
Beim normalen Klick wird der ausgewählte Datensatz des Listenfelds in einer
Tabelle geschrieben, beim Doppelklick öffnet sich ein Menü zum Bearbeiten der
Einträge.

Björn Benatzky

unread,
Oct 19, 2007, 8:15:00 AM10/19/07
to
"Jörg Ostendorp" <"Ostendorp(punkt)mpda(a" wrote:

Danke Jörg, die Anregung war gut! Ich habe es jetzt wie folgt gelöst:

GetCursorPos pt
lng = Me.Mein_Listenfeld.accHitTest(pt.X, pt.Y) - 1
If lng > -1 Then
Me.Mein_Listenfeld.ControlTipText = Me.Mein_Listenfeld.Column(0, lng)
End If

Damit bekomme ich jetzt immer als TippText den Wert der Zeile des
Listenfeldes angezeigt, über der sich der Mauszeiger gerade befindet!

Sascha Trowitzsch

unread,
Oct 19, 2007, 1:23:11 PM10/19/07
to
Hi,

"Björn Benatzky" <BjrnBe...@discussions.microsoft.com> schrieb im Newsbeitrag
news:3906BA58-C783-45C5...@microsoft.com...

Funktioniert übrigens in A2003, A2007; unter XP weiß ich's nicht.
Aber unter A2000 wird bei mir kein Tipptext angezeigt, weil das accHitTest ein
Flackern hervorruft, das offenbar die Anzeige des Tipptextes unterbindet.

Ciao, Sascha


Björn Benatzky

unread,
Oct 19, 2007, 1:36:04 PM10/19/07
to
Hallo Sascha,

"Sascha Trowitzsch" wrote:

Ich nutze A2003 unter WinXP und es funktioniert einwandfrei. Das Flackern
erscheint deswegen, weil bei jeder Mausbewegung die Position und der Tipptext
neu berechnet wird. Wenn Du den Code wie folgt abänderst, wird der TippText
nur aktualisiert, wenn sich der Cursor auch über einer neuen Zeile befindet
und damit sich der TippText ändert:

GetCursorPos pt
lng1 = Me.Mein_Listenfeld.accHitTest(pt.X, pt.Y) - 1
If lng1 > -1 And lng1 <> lng2 Then
Me.Mein_Listenfeld.ControlTipText = Me.Mein_Listenfeld.Column(0, lng1)
lng2 = lng1
End If

Die Deklaration von lng muß im Formular und nicht in der Sub sein, sonst ist
der Wert jedes Mal weg.

Gruß
Björn

Sascha Trowitzsch

unread,
Oct 19, 2007, 1:40:48 PM10/19/07
to
Hi,

"Björn Benatzky" <BjrnBe...@discussions.microsoft.com> schrieb im Newsbeitrag

news:1595EC65-C7AF-44EC...@microsoft.com...

Ja, ich sag doch, dass es unter A2003 läuft.
Unter A2000 nicht. Es reicht ein einzelnes Hittext, um das Tipp-Popup zu
eliminieren.

Ciao, Sascha


André Minhorst

unread,
Oct 19, 2007, 5:40:41 PM10/19/07
to
Hallihallo,

Sascha Trowitzsch schrieb:

>> Danke Jörg, die Anregung war gut! Ich habe es jetzt wie folgt gelöst:
>>
>> GetCursorPos pt
>> lng = Me.Mein_Listenfeld.accHitTest(pt.X, pt.Y) - 1
>> If lng > -1 Then
>> Me.Mein_Listenfeld.ControlTipText = Me.Mein_Listenfeld.Column(0, lng)
>> End If
>>
>> Damit bekomme ich jetzt immer als TippText den Wert der Zeile des
>> Listenfeldes angezeigt, über der sich der Mauszeiger gerade befindet!
>
> Funktioniert übrigens in A2003, A2007; unter XP weiß ich's nicht.
> Aber unter A2000 wird bei mir kein Tipptext angezeigt, weil das accHitTest ein
> Flackern hervorruft, das offenbar die Anzeige des Tipptextes unterbindet.

ich habe gerade nochmals alle Varianten von Access 2000 bis Access 2007
getestet: es läuft überall außer unter Access 2000.

Jörg Ostendorp

unread,
Oct 21, 2007, 4:59:20 PM10/21/07
to
Hallo Sascha,

> Ja, ich sag doch, dass es unter A2003 läuft.
> Unter A2000 nicht. Es reicht ein einzelnes Hittext, um das Tipp-Popup zu
> eliminieren.

da ich kein A2K auf meine Rechner lasse, kann ich dazu leider nichts sagen
(außer Danke für den Hinweis natürlich). Björns Vorschlag wäre auch mein
erster Gedanke gewesen.

Ich weiß zwar nicht, wie lange Access die Accessibility-Geschichte schon
implementiert, denke aber kaum, daß es da eventuelle Kinderkrankheiten
gibt/gab. Die Ursache würde ich gerade bei A2K eher in der Textzuweisung an
sich oder den Mouse-Events suchen.

Letzteres überlasse ich aber gerne Dir. Wer mit A2K arbeitet, ist das
Around-Würgen ja sowieso gewohnt ;-)
Vielleicht funktionieren ja die Windows-Tooltipps, eigene, direkt aus den
Windows-Nachrichten abgeleitete Mousemove-Events, oder zur allergrößten Not
auch ein Timer anstelle der Events?



--
Grüßle vom Bodensee
Jörg Ostendorp

Access-FAQ: www.donkarl.com

0 new messages