Hallo,
ich habe mir ein kleines User Control „gebastelt“, mit dem man verschiedenste Buttons selber machen kann. Man zeichnet sich einfach in einem Grafik-Programm den Button im nicht-gedrückten bzw. im gedrückten Zustand, übergibt dass dem User Control und fertig.
Das funktioniert sogar mit runden Knöpfen: d.h. nur der runde Teil ist anklickbar, obwohl das Control selber natürlich eckig ist!! Diese funktionalität unterstützt VB beim User Control ganz von selbst mit den Properties „MaskColor“ und „MaskPicture“. Ein kleines Test-Projekt zum Ausprobieren mit kompletten Source-Code gibts unter https://www.my-files.de/mkatlein/Oeffentlich/VisualB…
Jetzt zu meinem Problem: ich möchte ein „Hovern“ einbauen. Das wäre, wenn die Buttons immer eckig sind, ja relativ leicht. Wie funktioniert das, wenn die Buttons rund sind?!? Der „Hover-Effekt“ soll natürlich nur dann eintreten, wenn die Maus über den runden Teil des Buttons fährt!!!
Führe eine dritte Grafik für den Hover-Zustand ein.
Das ist mir schon klar … aber wie erkenne ich, ob die Maus über dem „tatsächlichen Button“ (das runde/ovale Bild!!!) ist. Bei einem rechteckigen Button habe ich das Problem ja nicht.
michL
Jetzt zu meinem Problem: ich möchte ein „Hovern“ einbauen. Das
wäre, wenn die Buttons immer eckig sind, ja relativ leicht.
Wie funktioniert das, wenn die Buttons rund sind?!? Der
„Hover-Effekt“ soll natürlich nur dann eintreten, wenn die
Maus über den runden Teil des Buttons fährt!!!
Ich habe es zwar selbst noch nicht getestet, aber mir scheint das HitTest-Ereignis des UserControl’s dafür geeignet. Einer der Parameter hängt nämlich von der MaskRegion ab. Diese ergibt sich aus MaskPicture und MaskColor.
Sag mir bitte bescheid, ob es geklappt hat, würde mich nämlich auch interessieren.
Im Notfall kannst du ja immer noch die Variante mit der Farbabfrage des Pixels machen, wie in der anderen Antwort beschrieben.
Ich habe es zwar selbst noch nicht getestet, aber mir scheint
das HitTest-Ereignis des UserControl’s dafür geeignet. Einer
der Parameter hängt nämlich von der MaskRegion ab. Diese
ergibt sich aus MaskPicture und MaskColor.
Hurra, ein absolut brauchbarer Teilerfolg:
Wenn man folgende Properties setzt
HitBehavior = Use Region
Windowless = True
erhält man den UserControl_HitTest()-Event. Im Parameter ‚HitResult‘ steht dann eine 3, wenn sich die Maus über der MaskRegion befindet.
Somit läßt sich der Hover-Effekt zumindest einmal auf vernünftige Art und Weise „einschalten“. (absolut cool - danke schön!!)
Jetzt muß ich nur noch irgendwie mitbekommen, daß die Maus den „MaskRegion“-Bereich wieder verlässt, damit ich den Hover-Effekt wieder ausschalten kann. Einen HitTestLost()-Event gibt’s leider nicht, oder doch?!?!?
Wer hat noch ideen - bitte melden!?!?!?
sanx from michL