PDA

Vollständige Version anzeigen : doEvents - warum klappts nicht?


Patzer
14.05.2001, 10:03
Hi,

ich baue die Datensatz-Navigation von Access nach. Nur klappt folgendes nicht: Wenn man auf den vorwärts bzw. rückwärts- Buttons unter Access die Maus gedückt hält, wird automatisch weiter in Richtung EOF bzw BOF navigiert. Ich dachte mir das folgender Code dies abbilden könnte:

' Deklaration auf Modulebene
dim blnIsPressed as Boolean

Private Sub cmdGotoNext_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

blnIsPressed = True
Dim strRSCount As String
Dim intrsmax As Integer
Dim strfilter As String
Do While blnIsPressed = True
strfilter = IIf(Len(Me.Filter) > 0, Me.Filter & " and isexportiert = false", "isexportiert = false")
intrsmax = DCount("Belegfeld1", "dbo_tblReEingangBuch", strfilter)
If Me.CurrentRecord < intrsmax Then
strRSCount = Me.Bookmark
Me.Refresh
Me.Bookmark = strRSCount
DoCmd.GoToRecord , , acNext
Else
Me.Refresh
DoCmd.GoToRecord , , acLast
End If
DoEvents
Loop
End Sub


Private Sub cmdGotoNext_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnIsPressed = False
End Sub

Tuts nur nicht. Putzigerweise wird Mouseup offensichtlich gar nicht ausgelöst. Wenn ich aber die Variable in Mousemove = false setze gehts. Nur hilft mir das nicht :-((

Hat irgend jemand ne Idee, wieso das nicht funzt, und wie man das impplementiert?

m.f.G.

Patzer

Alexander Jan Peters
15.05.2001, 00:23
<font color="#000000" size="2" face="Tahoma">Hallo,

mir fiel doch gleich auf, daß mir das Problem bekannt vorkommt, Spotlight-Access-Forum, oder? Bist ja immer noch dabei.
Ich schieb die Frage mal etwas nach oben, da mich eine endgültige Lösung auch interessieren würde.

Gruß

A.J. Peters</font>

sLUmp
16.05.2001, 08:41
servus,

hab versucht das Problem zu lösen viel ist dabei nicht rausgekommen.

Alles was ich rauskriegen konnte ist das Access die MouseUp Eigenschaft während der Schleife nicht beachtet (mit der linken Maustaste) wenn man die linke Maustaste außerhalb des Buttonn auf die Form klickt wird aber die Schleife solange angehalten bis die Maustaste losgelassen wird.
Während dem Druck (MouseDown, MouseUp) der rechten Maustaste auf den Button reagiert Access aber dennoch?????

Eine Lösung dieses Problems würde mich selber brennend interresieren.

hoffe es kommen noch Anregungen!

cu

Birgit Dannenberg
16.05.2001, 10:12
Nur mal so eine Idee:
kann man das vielleicht mit einem Timer-Event lösen???

Birgit

Alexander Jan Peters
16.05.2001, 10:58
<font color="#000000" size="2" face="Tahoma">Hallo,

ich habe hier mal die bisherige Diskussion aus dem Sportlight-Forum reinkopiert (es sind hier nämlich keine Links dahin machbar
und in ein paar Tagen würde das ansonsten bei Spotlight gelöscht).</font>
<FONT FACE="Tahoma" SIZE=1 COLOR="#000000">Springen zum nächsten DS
Hi,
Ich hab n Button mit ner Funktion, die zum nächsten DS springt. Nun soll, wie bei den
Access-Datensatznavigierern, wenn der User die Maus gedrückt hält, automatisch weiter
"vorwärts" navigiert werden. Vielleicht simpel, wenn man weiss wie, nur leider ... :-(
Aber vielleicht weiss es ja einer von Euch?
m.f.G.

Patzer

Geschickt von Patzer am 09.05.2001 um 12:26:08

Re: Springen zum nächsten DS
Hallo,
starte aus dem MausTasteAb-Ereignis eine Private Prozedur, die in einer Endlosschleife immer
einen DS weiter (Do Until ... Loop) läuft, baue da eine Prüfbedingung ein (Do Until fAbbruch = True),
wie das Abfragen einer auf Modulebene deklarierten Variablen. Im MausTasteAuf-Ereignis
setzt Du diese Variable auf den Abbruchwert.
Gruß

A.J. Peters
Geschickt von Alexander Jan Peters am 09.05.2001 um 19:23:42
Bezogen auf eine Nachricht von Patzer vom 09.05.2001 um 12:26:08
Re: In der Schleife noch DoEvents-Funktion, hatte ich verg. (OT)
Geschickt von Alexander Jan Peters am 10.05.2001 um 00:00:29
Bezogen auf eine Nachricht von Alexander Jan Peters vom 09.05.2001 um 19:23:42
Re: Das genau war auch meine Idee, nur funztzs nicht
Hi,
ich poste mal meinen Code, vielleicht weiss jemand meinen Fehler:
dim blnbuttonPressed as boolean
Private Sub cmdGotoNext_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnbuttonPressed = True
Dim strRSCount As String
Dim intrsmax As Integer
Dim strfilter As String
While blnbuttonPressed = True
'Die Filter sind hier nicht relevant
strfilter = IIf(Len(Me.Filter) > 0, Me.Filter & " and isexportiert = false", "isexportiert = false")
intrsmax = DCount("Belegfeld1", "dbo_tblReEingangBuch", strfilter)

If Me.CurrentRecord < intrsmax Then
strRSCount = Me.Bookmark
Me.Refresh
Me.Bookmark = strRSCount
DoCmd.GoToRecord , , acNext
Else
Me.Refresh
DoCmd.GoToRecord , , acLast
End If
DoEvents
Wend
End Sub

Private Sub cmdGotoNext_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
buttonPressed = False
End Sub

m.f.G.
Patzer

Geschickt von Patzer am 10.05.2001 um 16:20:52
Bezogen auf eine Nachricht von Alexander Jan Peters vom 10.05.2001 um 00:00:29

Re: Hast leider recht, hier eine "Alternative"
Hallo,

schade, Du hast leider recht, das geht so nicht, aber mir scheint, als ob das Ereignis MouseUp auch
gar nicht ausgelöst wird.
Räselhaftes Verhalten, einen Alternative wäre es vielleicht, den Stop-Befehl ins MouseMove-Ereignis
zu legen, aber das erzielt natürlich nicht den gleichen Effekt, funktioniert dann aber.</font>
<FONT FACE="Courier New" SIZE=1 COLOR="#000000">
Dim fStop As Boolean
Private Function fGetStop() As Boolean
fGetStop = fStop
End Function
Private Sub cmdGotoNext_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
fStop = False
Dim fBuffer As Boolean
Dim sglTim As Single
Dim sglLen As Single

sglLen = 0.02

Do
On Error GoTo err
DoCmd.GoToRecord , , acNext

sglTim = Timer + sglLen
Do Until sglTim <= Timer
DoEvents
Loop
fBuffer = fGetStop
If fBuffer = True Then Exit Do
Loop
Exit Sub
err:
Exit Sub
End Sub

Private Sub cmdGotoNext_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
fStop = True
End Sub
Private Sub Formularfuß_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
fStop = True
End Sub</FONT>
<FONT FACE="Tahoma" SIZE=1 COLOR="#000000">
Ich hab da noch eine Verzögerung eingebaut, damit es nicht so schnell mit dem Datensatzwechsel geht, kannst Du Dir ja noch etwas anpassen
(Verzögerungswert steht in sglLen).
Die Fehlerbehandlung sorgt dafür, daß bei Erreichen des letzten DS die Schleife abgebrochen wird, ich denke ansonsten gibt es bei der
DoCmd-Aktion keine Fehlerquelle, so daß Du Dir damit eigentlich die Ermittlung der Gesamtzahl von DS sparen kannst
(es sei denn, Du brauchst sie für etwas anders).

Gruß

A.J. Peters

Geschickt von Alexander Jan Peters am 10.05.2001 um 20:11:58
Bezogen auf eine Nachricht von Patzer vom 10.05.2001 um 16:20:52</font>

WAG
16.05.2001, 13:41
Hallo,
nicht einmal die von Microschrott gelieferte Befehlsschaltflächen Eigenschaft 'Makro wiederholen' funktioniert nicht, wenn in der Ereignisprozedur ein DoCmd.GoToRecord steht.

Dieter