Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Screen-Cursor-Steuerung

Screen-Cursor-Steuerung
10.07.2016 14:43:15
Nick
Hallo,
teilweise gehören in einer Tabelle die Daten zweier Spalten und zweier Zeilen immer zusammen.
Idee war jetzt, in diesem Bereich mit Buttons und entsprechender Schrittweite 'navigieren' zu können. Die Buttons sollen Richtungspfeile haben und nicht größer als 18x19 Pixel sein. - Da ich diese Größe mit Command-Buttons nicht umsetzen konnte, habe ich Excel-Pfeile als Meta-File in 'Picture' eingefügt. -
Sieht etwa aus wie beabsichtigt, aber der 'Bild-Button' soll animiert sein: Für die Dauer des Click die Farbe ändern und über .SpecialEffect einsinken.
Im angehängten Beispiel klappt dies leider erst beim Loslassen der Maustaste und muss nach Application.Wait wieder zurückgesetzt werden.
Weiterhin gefällt mir der Spagetti-Code "UserForm1.Image1. ...4 natürlich überhaupt nicht.
Sieht da jemand von euch eine bessere Lösung? - Gruß Nick

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Screen-Cursor-Steuerung
10.07.2016 15:17:43
Daniel
Hi
das könntest du über die MouseDown- und MouseUp-Events der Image-Controls steueren.
bzw normale Makros, die aber nur für die userform gültig sind, kannst du auch direkt ins Modul der Userform schreiben:

Option Explicit
Dim FarbeAlt As Long
Private Sub Gedrückt(crt As Control)
FarbeAlt = crt.BackColor
crt.BackColor = vbRed
crt.SpecialEffect = 2
End Sub
Private Sub Losgelassen(crt As Control)
Dim z As Long, s As Long
crt.BackColor = FarbeAlt
crt.SpecialEffect = 0
z = ActiveCell.Row
s = ActiveCell.Column
Select Case crt.Name
Case "Image1": s = s - 2
Case "Image2": z = z + 2
Case "Image3": s = s + 2
Case "Image4": z = z - 2
End Select
z = WorksheetFunction.Max(1, z)
z = WorksheetFunction.Min(Rows.Count - 1, z)
s = WorksheetFunction.Max(1, s)
s = WorksheetFunction.Min(31, s)
Cells(z, s).Resize(2, 2).Select
End Sub
Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Call Gedrückt(Image1)
End Sub
Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Call Losgelassen(Image1)
End Sub
Private Sub Image2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Call Gedrückt(Image2)
End Sub
Private Sub Image2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Call Losgelassen(Image2)
End Sub
Private Sub Image3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Call Gedrückt(Image3)
End Sub
Private Sub Image3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Call Losgelassen(Image3)
End Sub
Private Sub Image4_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Call Gedrückt(Image4)
End Sub
Private Sub Image4_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Call Losgelassen(Image4)
End Sub
gruß Daniel

Anzeige
AW: Screen-Cursor-Steuerung
10.07.2016 19:52:35
Nick
Hi Daniel,
schätze du hattest den vergessenen Link in der ersten Antwort noch gefunden? Deine Lösung sieht wirklich toll aus! -
Ich hab' noch den 31 Spaltenüberlauf in die nächste Zeile mit rein genommen. - Im OriginalCode werde ich wohl in der Loslassen-Sub SetForegroungWindow nutzen müssen, damit auch die normale Schrittweite über die Tastatur-Cursortasten ohne vorherigen Mausklick in die Tabelle funktioniert.
Blöde Idee: Wäre in der Gedrückt-Sub eine Wiederholen-Funktion zu implementieren? - Zeit holen - While immer noch gedrückt länger 1Sekunde dann nächster Spalte/Zeile-Step, usw...?
Ich versuche mich aber -so Zeit ist- auch selbst noch daran. - Gruß Nick

Die Datei https://www.herber.de/bbs/user/106899.xlsm wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Screen-Cursor-Steuerung
10.07.2016 22:05:30
Daniel
Hi
wird aufwendig.
wenn dir das Wiederholen beim Gedrückt-lassen wichtig ist und du auf das umfärben verzichten kannst, würde ich statt der der vier Buttons Zwei DREH-Felder einsetzen, eins hochkant und ein quer und den Code zum Verschieben dann ins SpinUp- und SpinDown-Event der jeweiligen Drehfelder.
Bei den Drehfeldern ist das Wiederholen beim Gedrückthalten schon automatisch mit drin.
Umfärben wird schwierig, weil du immer nur das ganze Drehfeld färben kannst.
oder du nimmst 4 Drehfelder, und belegst dann immer nur eines der SpinUp-SpinDownEvents mit dem Code, das andere lässt du blind.
Dann ordnest du die 4 Buttons in Kreuzform an, so dass sich die blinden Buttons überdecken und legst über die Mitte noch ein Label.
dann müsste umfärben und wiederholen funktionieren.
gruß Daniel

Anzeige
AW: Screen-Cursor-Steuerung mit Wiederholfkt
11.07.2016 13:28:33
Daniel
Hi
hier mit Wiederholfunktion auch für deine Images.

Die Datei https://www.herber.de/bbs/user/106911.xlsm wurde aus Datenschutzgründen gelöscht


Gruß Daniel

AW: Screen-Cursor-Steuerung mit Wiederholfkt
12.07.2016 18:16:50
Nick
Hallo Daniel,
das ist -eigentlich- genau die Funktionalität, die ich mir vorgestellt hatte. Auf die Idee mit DoEvents wäre ich wohl nicht so schnell gekommen. - Mit einer winzigen Änderung habe ich noch erreicht, dass die Verzögerung zur ersten Wiederholung etwas länger dauert und die weiteren Verzögerungen dann schnell durchlaufen:

Private Sub CursorVerschieben(crt As Control)
Dim zeile As Long, spalte As Long
Dim t As Double
t = Timer + 0.7 'verzögerung für erste wiederholung
Do Until Beenden
zeile = ActiveCell.Row
spalte = ActiveCell.Column
Do
DoEvents 'prüfen, ob mouseup ausgeführt wurde
Loop While Timer 

Blöderweise musste ich heute auf einem anderen PC feststellen, dass dort seltsamerweise -ausschließlich- der Klick auf Image4 (Pfeil nach oben) kleben bleibt und der Cursor weiterläuft wenn der (Maus-)Button schon losgelassen wurde. - Ob das vielleicht mit dem dort installierten Maustreiber zusammenhängt? -
https://www.herber.de/bbs/user/106965.xlsm
Gruß Nick

Anzeige
AW: Screen-Cursor-Steuerung mit Wiederholfkt
12.07.2016 21:43:39
Daniel
HI
die Ursache ist, dass das MouseDown-Event von Image4 ein bisschen anders ist als die anderen MouseDown-Events.
Vergleiche mal die MouseDown-Eventmakros miteindaner, dann sollte dir schon auffallen, warum der eine Button etwas anders reagiert als die übrigen.
Gruß Daniel

AW: Screen-Cursor-Steuerung
10.07.2016 14:46:13
Daniel
Hi
du hast leider vergessen, die Datei anzuhängen.
wenn du die Datei zum Server hochgeladen hast, wird dir eine Linkadresse angezeigt.
diese musst du kopieren, dann wieder zur Anzwort zurückgehen und dort einfügen.
Gruß Daniel

sieht cool aus,
10.07.2016 16:30:37
Michael
Daniel,
ich hatte auch grad dran herumgebastelt, aber auf das Gemause wär ich nicht gekommen.
In diesem Fall mag ich meine Variante gar nicht zeigen, nur die beiden Zeilen:
    If (zeile And 1) = 0 Then zeile = zeile + 1
If (spalte And 1) = 0 Then spalte = spalte + 1

die sicherstellen, daß die linke, obere Ecke immer ungerade ist, auch wenn eine x-beliebige Zelle selektiert ist.
Schöne Grüße,
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige