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?
> 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?
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
> 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.
> 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?
>> 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!
>> 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?
>>> 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?
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" wrote: > >> 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
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.
> > 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?
> 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
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!
>> > 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?
>> 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
> 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 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?
> >> 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
> > 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.
> Ciao, Sascha
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.
>> >> > 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?
>> >> 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
>> > 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.
>> Ciao, Sascha
> 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.
Ja, ich sag doch, dass es unter A2003 läuft. Unter A2000 nicht. Es reicht ein einzelnes Hittext, um das Tipp-Popup zu eliminieren.
> "Björn Benatzky" <BjrnBenat...@discussions.microsoft.com> schrieb im Newsbeitrag > news:3906BA58-C783-45C5-81C1-6722BB015EAA@microsoft.com... >> "Jörg Ostendorp" <"Ostendorp(punkt)mpda(a" wrote: >>>> 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? >>> 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 >> 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.
> 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?