Bild ändern, wenn Maus darüber fährt

Hallo alle zusammen,

ich hab d mal wieder ne Frage. Natürlich hat diese Mit Visual Basik (VB6) zu tun!
Und zwar:
Ich habe ein Bild, und ich möchte, dass sich das Bild ändert, wenn man mit der Maus darüber fährt!
Ich habe mir das so vorgestellt.
Die beiden Bilder sind einfach übereinander und das, was oben drauf ist, ist unsichtbar, also
Bild2.visible=false

wenn ich aber mit der Maus über das ersee Bild gehe, dann wird das zweite bild sichtbar.
Automatisch ist die Maus im zweiten bild, also muss, solange der curso im Bild2 ist, Bild2 auch sichtbar bleiben.

Verlässt die Maus jetzt Bild2, so soll es wieder unsichtbar werden.

wie geht das?

Danke für gute Antworten schon mal im Vorraus^^

Gruß
christopher

wenn ich aber mit der Maus über das ersee Bild gehe, dann wird
das zweite bild sichtbar.
Automatisch ist die Maus im zweiten bild, also muss, solange
der curso im Bild2 ist, Bild2 auch sichtbar bleiben.

Verlässt die Maus jetzt Bild2, so soll es wieder unsichtbar
werden.

Hi Christopher,

wiederum nur für Vba und auch nur die halbe Lösung :frowning:

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Application.StatusBar = X
Image1.Visible = False
Image2.Visible = True
End Sub

das klappt, leider fand ich kein Ereignis dies wiederumzukehren, Image1_LostFocus isses wohl nicht.

Image2_Click oder so wäre ein workaround, aber VB ist ja mächtiger als Vba, da wirds schon ein Verlass-Ereignis geben *nixweiß*

Gruß
Reinhard

Hallo Reinhard,Christopher,

Hi Christopher,

wiederum nur für Vba und auch nur die halbe Lösung :frowning:

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal
Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Application.StatusBar = X
Image1.Visible = False
Image2.Visible = True
End Sub

das klappt, leider fand ich kein Ereignis dies
wiederumzukehren, Image1_LostFocus isses wohl nicht.

Richtig, das ist auch der falsche Ansatz :confused:

Image2_Click oder so wäre ein workaround, aber VB ist ja
mächtiger als Vba, da wirds schon ein Verlass-Ereignis geben
*nixweiß*

Das LosFocus Event gibt es. Aber das wird in dem Falle ja nicht ausgelöst! Aber auch die Form hat das tolle Event MouseMouve, was man nutzen kann. Dazu kennt man die Koordinaten wo die „Bildbox“ positioniert ist. Mit ein wenig Mathe weiss man ob sich der Mauszeiger über dem Bild befindet oder nicht :smile:

Gruß
Reinhard

MfG Alex

Das LosFocus Event gibt es. Aber das wird in dem Falle ja
nicht ausgelöst! Aber auch die Form hat das tolle Event
MouseMouve, was man nutzen kann. Dazu kennt man die
Koordinaten wo die „Bildbox“ positioniert ist. Mit ein wenig
Mathe weiss man ob sich der Mauszeiger über dem Bild befindet
oder nicht :smile:

Hallo Alex,

ist das in VB anders? In Vba ist es so, solange ich mich über dem Bild bewege kann ich über Image_MouseMove die xyKoordinaten auswerten, aber sobald ich nicht mehr über dem Bild bin ist das weg und das Verlassen des Bildes löst nichts aus was ich auswertn könnte um irgendwas zu tun.

Von daher, im Sinne der Anfrage, der Anfrager hat da wohl 2 Bilder gleichgroß übereinander.
Angezeigt wird Bild1, wenn er mit der Maus über Bild1 fährt soll warum auch immer Bild2 abgezeigt werden.
Das kriege ich ja hin, aber ich weiß mir keinen rat wie ich es hinkriege, daß nach Verlassen des Bildbereiches wieder Bild1 angezeigt wird, denn MouseMove gibt es dann nicht mehr.

Gruß
Reinhard

Hallo Reinhard,

Angezeigt wird Bild1, wenn er mit der Maus über Bild1 fährt
soll warum auch immer Bild2 abgezeigt werden.

schlechte Idee, aber das schreibe ich oben. :smile:

Das kriege ich ja hin, aber ich weiß mir keinen Rat wie ich es
hinkriege, daß nach Verlassen des Bildbereiches wieder Bild1
angezeigt wird, denn MouseMove gibt es dann nicht mehr.

Korrekt, das geht so einfach auch nicht. Wenn ich mich Recht erinnere ging das so:

Die Mausposition muss systemweit abgefragt werden, in einer Klasse ein globales Mouse-Move-Ereignis gefeuert werden. Dabei bekommt man auch das Handle des Fensters/Sueuerelements, über dem sich die Maus befindet und das kann man mit dem Bild vergleichen.

Bei AVB gibt es einen fertigen Code für ‚HoverButton‘.

Gruß Rainer

Hallo Reinhard,

du bist ja kein Dummer *zwinker* Von daher reicht es hoffentlich wenn ich ne kurze Anleitung schreibe ohne Source, oder ?

Unter VB gibt es Picture sowie auch ImageBoxen! Desweiteren hast du ja das Formular.

Gehen wir von mir aus mal von einer Imagebox aus, die auf der Form liegt.
Das LostFocus Event wird ja nur ausgelöst wenn das Steuerelemt den Focus verliert. Also nuetzt uns das nichts :s

Aber! Die Form hat ja ein MouseMove Event und die Form hat das auch! In beiden Faellen bekommst du die Koordinaten ( x und y) zurueck.
Er wollte ja, das wenn er mit der Maus auf das Image1 faehrt, dann das andere Image angezeigt wird. Ok, das kann man leicht bewerkstelligen auf deine Art. Was ist aber nun, wenn er auch dieses Bild verlaesst?

Lass uns mal kurz nachdenken :wink:

Er verlaesst das Bild? Wo befindet er sich ergo dann?
Auf der Form! Dort haben wir die Koordinaten x und y. Wir wissen ja auch wo die Imagebox beginnt.
So nun haben wir schon alle Info’s die wir brauchen :smile:

Er faehrt mit der Maus, auf das Image! Ergo wir muessen das neue Bild anzeigen. Das Event MouseMove wird ausgelöst. Wir zeigen nun das neue Bild an! Setzen ein globales Flag das das Bild angezeigt ist. Er bewegt nun weiter fleissig die Maus.
Wo kann er denn sein? Entweder auf dem neuen Image! Das Interessiert uns nicht und wir machen nichts! Sobald er aber auf die Form gelangt, wird dort wiederrum das Event ausgelöst! Und genau darauf reagieren wir. Wo der Mauszeiger auf der Form sich da aber befindet, soll uns nicht interessieren :wink: Wir setzen nun das Bild einfach wieder zurueck und setzen die globale Variable um! Sicher fragst du dich nun warum?
Er kann die Maus ja weiter ueber die Form bewegen und löst somit wiederrum das Event aus. Wir haben aber schon das Bild umgeschalten und brauchen es nicht mehr :smile: Deswegen das Flag ( die globale Variable)

So und somit korrigiere ich mal das was ich oben geschrieben habe, das wir beim ausloesen des Events MouseMove der Form wir einfach das Bild umschalten , weil das nicht ganz richtig war.

Wir muessen die Globale Variable abfragen und je nachdem das bild umschalten und die Variable auch :wink:

Einen Source, poste ich nur ungern. Da
A: Der Fragesteller, nicht einmal ein Danke ueber die Lippen bringt
B: Er sich nicht einmal muehe gegeben hat, die Frage zu formulieren
C: Er die Antworten, eh nur fluechtig durchliesst
D: Er eh nur nen Source will, ohne sich Gedanken zu machen

MfG Alex

Hallo,

Ich habe ein Bild, und ich möchte, dass sich das Bild ändert,
wenn man mit der Maus darüber fährt!

Ein HoverButton. Das ist nicht einfach.

Ich habe mir das so vorgestellt.
Die beiden Bilder sind einfach übereinander und das, was oben
drauf ist, ist unsichtbar, also
Bild2.visible=false

Das ist schlecht, denn unsichtbare Steuerelemente haben keine Ereignisse. Nimm lieber nur ein Bild und weisen dem den Inhalt von zwei verschiedenen anderen zu. Das ist einfacher.

wenn ich aber mit der Maus über das ersee Bild gehe, dann wird
das zweite bild sichtbar.
Automatisch ist die Maus im zweiten bild, also muss, solange
der curso im Bild2 ist, Bild2 auch sichtbar bleiben.

Verlässt die Maus jetzt Bild2, so soll es wieder unsichtbar
werden.

Genau das Letzte ist schwer, weil es kein Ereignis ‚MouseLeave‘ gibt.

Gelöst ist das hier:
http://www.activevb.de/tipps/vb6tipps/tipp0488.html

Aber nicht erschrecken, es ist eben nicht einfach.

Gruß Rainer

[Tippfehler korrigiert]

Hallo Rainer, Reinhard

hmm, so langsam bekomme ich nen schlechtes gewissen :s

Aber warum macht ihr euch es so schwer?
Geschrieben, in 48 Sekunden *feix* ( ja ich weiss nen bissl langsam, aber denkt an die zeit und an das Alter :smiley: )

Option Explicit

Dim Change As Boolean

Private Sub Form\_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Change Then
 Picture1.Visible = Not (Picture1.Visible)
 Picture2.Visible = Not (Picture2.Visible)
 Change = Not (Change)
 End If
End Sub

Private Sub Picture1\_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Picture1.Visible = Not (Picture1.Visible)
 Picture2.Visible = Not (Picture2.Visible)
 Change = True
End Sub

Ist es nicht das was gesucht ist?

MfG Alex

Hi Alex,

Er verlaesst das Bild? Wo befindet er sich ergo dann?
Auf der Form!

Leider nicht zuverlässig. Die Maus kann auch über einem anderen Steuerelement stehen, die ‚Lücke‘ ist je nach Geschwindigkeit unterschiedlich groß. Teste mal. Wenn Du die Maus schnell bewegst, kannst Du 100 Pixel weit ‚springen‘ ohne daß die Form ein Ereignis auslöst. Das ist nicht stabil genug.

Gruß Rainer

Hi Alex,

gerade oben geschrieben, praktisch gleichzeitig mit Dir. :smile:

Nein, das geht nicht, ist instabil. Das Mausereignis wird zu selten ausgelöst, es ist nicht sicher, daß der zeiger auf die Form kommt.

Gruß Rainer

Hi Alex,

probier mal das …

Option Explicit

Private Sub Form\_MouseMove(Button As Integer, Shift As
Integer, X As Single, Y As Single)
Me.Pset x,y
End Sub

Müssen da Klammern hin? Siehst Du ja.

Dann wisch mal mit der Maus über die Form und sieh Dir die großen Lücken an, dann weißt Du, wie zuverlässig das ist.

Gruß Rainer

Hallo Rainer,

probier mal das …

Mach och doch glatt :wink:

Option Explicit

Private Sub Form_MouseMove(Button As Integer, Shift As
Integer, X As Single, Y As Single)
Me.Pset x,y
End Sub

Müssen da Klammern hin? Siehst Du ja.

Jups, die muessen da hin :wink:

Dann wisch mal mit der Maus über die Form und sieh Dir die
großen Lücken an, dann weißt Du, wie zuverlässig das ist.

Hab ich :smile: Es kommt darauf an, wie schnell man die Maus bewegt. Je nachdem werden die Luecken da grösser. Aber ist das "kleine " Problemchen für den Fragesteller relevant?
Muss man damit rechnen das das Bild ganz am Rand sitzt und jemand in Recordzeit die Maus da rausmorkst? Wobei das schon ein Kunststueck waere! Desweiteren würde in meinem Posting spätestens wenn er mal wieder auf die Form gelangt dann das Bild zurueck gesetzt werden :wink:

Also ich würde das ganz getrost vernachlaessigen :smile:

MfG Alex

Gruß Rainer

Hi Alex,

Also ich würde das ganz getrost vernachlaessigen :smile:

nein, wirklich nicht. :smile:

Meist sind da ja noch andere Steuerelemente, Button … Das funktioniert so wirklich nicht, hab’ ich schon versucht. Das arbeitet wie ein Blinker. Geht, geht nicht, geht … *fg*

Gruß Rainer

Hi Alex,

Hallo Rainer,

Also ich würde das ganz getrost vernachlaessigen :smile:

nein, wirklich nicht. :smile:

Meist sind da ja noch andere Steuerelemente, Button … Das
funktioniert so wirklich nicht, hab’ ich schon versucht. Das
arbeitet wie ein Blinker. Geht, geht nicht, geht … *fg*

Feix, wie gesagt. Es kommt immer auf die Randbedingungen an.
Auch sehe ich darin nicht den Sinn! Will ich ein Button haben der eine Art Hover Effekt hat, so würde ich mir kurzerhand nen OCX basteln. Somit wären wir dem Problem aus dem Wege gegangen :smile:
Aber die Randbedingungen, wieso, weshalb, warum hat er ja nicht gepostet und meine Glasmurmel ist grad net hier :wink:

So Rainer, ich mache nun nen Abfluig ins Bettchen. Muss um 5 Uhr wieder raus zu schaffen. Ich haenge heute schon den ganzen Tag an dem Synchronisations Dinge dran :s Jedesmal faellt mir noch was tolles ein *feix* und nunja kennst das ja :wink: Ich denke mal das ich am Freitag Joe ne fertige Lösung für den Server posten kann :smile:
Dann fehlt nur noch der Client. Aber dabei sehe ich 2 problemchen :frowning:

Erstens immernoch, wie ich vom Rechnernamen auf die IP komme, ohne mir alle Rechner im Netzwerk auflisten zu lassen und dann dort vergleiche anzustellen ( Wird aber sicher darauf hinauslaufen, es sei denn du, kannst mir ne Lösung praesentieren, oder wenigstens nen Ansatz!
Unter .NET, waere das nen klassischer 1 Zeiler *feix* aber VB *grml*

Und dann auch noch. Hast du ne Ahnung, wie ich von einem Netzwerk aus, Dateien Kopiere? Sowas habsch noch nie praktiziert, kanns net testen :frowning: Muesste sonst erst einmal suchen, wie das geht. Hast du da ne Idee?

MfG Alex