Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
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

Button Hover Effekt

Button Hover Effekt
25.07.2021 13:07:42
Flo
Liebe Community, ich bin Mal wieder ratlos...
Mein Ziel ist es für CommandButtons auf dem Arbeitsblatt (nicht UserForm!) einen Mouse-Over Effekt zu erzielen, bei dem sich die Farbe des Buttons ändert, wenn sich die Maus darüber befindet.
Meine bisherige Herangehensweise lautet wie folgt:
- Durchsichtiges Label über das gesamte Arbeitsblatt erstellen
- Mittels CommandButton1_MouseMove die Farbe zu ersten Mal zu ändern
- Mittels Label1_MouseMove die Farbe wieder zurücksetzen

Public letzter_cmdButton As Object
Public Maus_ueber_Button As Boolean
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
If Maus_ueber_Button = False Then
CommandButton1.BackColor = vbGreen
Maus_ueber_Button = True
ActiveSheet.Label1.Visible = True
CommandButton1.BringToFront
Set letzter_cmdButton = CommandButton1
End If
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
If Maus_ueber_Button = True Then
letzter_cmdButton.BackColor = vbBlue
Label1.Visible = False
Maus_ueber_Button = False
End If
End Sub
Problem:
Die Aktualisierung hängt immer einige hundertstel Sekunden hinterher. Es fällt auf, wie der Lag in einem Spiel.
Was ich versucht habe:
- DoEvents einbauen
- Loop und sleep, sodass DoEvents genug Zeit zum ausführen hat
- Application.ScreenUpdating = True
- ActiveSheet.Calculate
- ActiveWindow.SmallScroll
- Application.WindowState = Application.WindowState
Ich bin mit meinem Latein am Ende und für alle Vorschläge offen.
Hoffentlich konnte ich mein Problem verständlich darlegen. Vielen Dank vorab!
mfg, Flo

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button Hover Effekt
25.07.2021 16:13:15
Flo
Vielen Dank für den Link, das Video habe ich vorab auch schon gefunden.
Gute Idee, nur wenn ich die selbe Logik auf CommandButtons anwende, dann flackert der Button in den unterschiedlichen Farben, so lange sich die Maus innerhalb des Buttons bewegt.
AW: Button Hover Effekt
25.07.2021 16:18:57
ralf_b
naja warum muß es ein Commandbutton sein? Der limitiert doch dein Ansinnen. Für einen Click geht jedes Shape.
AW: Button Hover Effekt
25.07.2021 16:24:07
Flo
Gute Frage ;)
Zum einen sieht ein CommandButton eben aus, wie ein Button und hat vor allem auch die entsprechende optische Änderung beim Klicken bereits eingebaut. Bei Shapes müsste ich dann auch noch ein 3. Shape erstellen, sodass der Mausklick optisch repräsentiert.
Außerdem baue ich ein komplexeres Programm, weshalb ich gerne die altbekannten CommandButtons verwenden würde. So kann ich auch einfacher unterschieden, ob etwas ein Bild, eine TextBox, ein Button oder sonst etwas ist...
LG Flo
Anzeige
AW: Button Hover Effekt
25.07.2021 16:31:25
Flo
Wobei es bei anderen Shapes ebenso zum flackern kommen würde, da ja jede Mausbewegung das Event auslöst und nich nur, wenn die Maus das Shape "betritt".
AW: Button Hover Effekt
25.07.2021 16:37:51
ralf_b
Wenn du dir Kopfzerbrechen sparen willst, dann lieber es so nehmen wie es ist. Ein Umstricken, um special Effects zu realisieren, führt unweigerlich zu Klassenprogrammierung und API-Funktionen.
AW: Button Hover Effekt
25.07.2021 16:44:00
Flo
Als Klasse lasse ich meine Buttons ohnehin laufen. Wollte den ursprünglichen Post nicht noch komplizierter machen.
Von API-Funktionen habe ich noch nie gehört. Kannst du mich da in irgendeine Richtung weisen?
Hier das Klassenmodul:

Option Explicit
Private WithEvents MyCmdbtn As MSForms.CommandButton
'# aktueller Commandbutton wird in MyCmdbtn geschrieben
Public Property Set control(cmdbtn As MSForms.CommandButton)
Set MyCmdbtn = cmdbtn
End Property
'# Aktion bei Klick auf Commandbutton
Private Sub MyCmdbtn_Click()
Debug.Print "Hier bin ich"
End Sub
'# Aktion bei MouseOver
Private Sub MyCmdbtn_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
If Maus_ueber_Button = False Then
MyCmdbtn.BackColor = vbGreen
Maus_ueber_Button = True
ActiveSheet.Label1.Visible = True
MyCmdbtn.BringToFront
Set letzter_cmdButton = MyCmdbtn
End If
End Sub

Anzeige
bei API und Klassen bin ich leider raus. owT
25.07.2021 16:47:16
ralf_b
Besser wird es nicht
26.07.2021 11:30:46
Yal
Sorry, Flo,
aber Du muss Dich abfinden, dass Du mit VBA in Excel und nicht mit Core-Prozess-nähem C-Programmierung unterwegs bist.
Was zu beschleunigen wäre, ist die Reaktionszeit der Anzeige unter Excel. Da hat keine Werkzeug darauf Zugriff, weil Excel dazwischen steht.
Höchstens könntest Du alle Excel-Mechanismen ausschalten, die dazu führen, dass Excel zuerst was anderes erledigen muss, bevor es sich die Anzeige-Aktualisierung widmet, aber ob es ein spürbare Beschleunigung bringt, ist nicht mal sicher.
VG
Yal
AW: Besser wird es nicht
01.08.2021 20:18:23
Flo
Hi Yal, noch vielen dank für deine Antwort!
Für alle, die zukünftig über diesen Forumseintrag stolpern... Ich habe eine Lösung gefunden:
Label über den ganzen Bildschirm ziehen und zwei Buttons über einander legen.
Wenn die Maus in den Layover-Button "betritt", verschwindet (visible=False) dieser und gibt somit den tatsächlichen Button frei. Wenn die Maus dann wieder die Buttons verlässt und somit das Label betritt, wird der Layover-Button wieder sichtbar gemacht. Natürlich muss darauf geachtet werden, dass das Label in der Vordergrund bzw. Hintergrund gerückt wird...
Diese Technik funktioniert super ohne zeitlichen delay.
Beste Grüße, Flo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige