Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    [VB6] Variare immagine al passaggio del mouse

    ho un Command e vorrei che al passaggio del mouse si visualizzi un immagine (e fin qui ci sono riuscito con MouseMove), ma poi vorrei anche che nel momento in cui il mouse abbandona l'area del Command, si visualizzasse un'altra immagine (ovvero quella iniziale del Command, quella impostata dalle proprietà intendo).
    qualcuno mi può aiutare?

    p.s. poi vorrei fare la stessa cosa anche con una picturebox... ma credo che il procedimento sia lo stesso di quello per un command giusto?
    grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    io avevo risolto in questo modo:

    con una chiamata api determinavo la posizione del mouse sulla form nell'evento mouse move e quando questa andava sulle coordinate x e y del bottone o della picture mi caricava l'immagine o cambiavo la proprieta' text

  3. #3
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    con le API per forza?
    non è possibile farlo senza?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    A me viene in mente solo questa soluzione.

  5. #5
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    non c'è modo di rilevare l'uscita da un controllo se non con l'utilizzo di un timer e di due funzioni API, nella fattispecie, la GetCursorPos e la WindowFromPoint.

    se ne vuoi fare a meno devi controllare il MouseMove sul Form, ma se i controlli stanno in un frame, ad esempio, è tutto vano...

    in sostanza l'utilizzo delle API è la strada migliore... che non è poi tutta questa gran difficoltà...

    Boolean

  6. #6
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178
    ...se non c'e altro modo... qualcuno potrebbe farmi un codice di esempio con l'API?

  7. #7
    L'ho scritto ora "a mano", quindi può essere migliorato molto, cmq tanto per darti un'idea (anche di come è facile usare questa funzione API):
    codice:
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    
    Private Sub Form_Load()
    Timer1.Enabled = True
    Timer1.Interval = 1
    End Sub
    
    Private Sub Timer1_Timer()
    Dim lp As POINTAPI
    GetCursorPos lp
    If lp.X < 100 And lp.X > 0 Or lp.Y < 200 And lp.Y > 50 Then  'la coordinata orizzontale
    'è compresa tra 0 e 100, metti le coordinate del tuo command
    'image1.picture = metti cosa ti pare
    Else
    'image1.picture = metti cosa ti pare
    End If
    End Sub
    Il sistema di misura deve essere in pixel..

    ciao

  8. #8
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    il codice di MdE, può andar bene...

    ma forse in questo modo hai più libertà di movimento per gestire ulteriori controlli, e poi, utilizzando come dicevo prima, la WindowFromPoint, puoi evitare di scrivere ogni volta le coordinate del controllo, anche in virtù del fatto che mi sembra di aver capito che potrebbero essere anche più di uno...

    per provare il codice, metti sul form:

    - 1 Timer
    - 1 Pulsante con Style = Graphical
    - 2 PictureBox
    - 2 ImageBox con 2 immagini differenti

    lascia tutti i nomi di default, e copia questo codice:

    codice:
    Private Declare Function GetCursorPos Lib "user32.dll" ( _
         ByRef lpPoint As POINTAPI) As Long
    
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    
    Private Declare Function WindowFromPoint Lib "user32.dll" ( _
         ByVal xPoint As Long, _
         ByVal yPoint As Long) As Long
    
    Dim ActControl As Object
    
    Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Set ActControl = Command1
    Timer1.Enabled = True
    End Sub
    
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Set ActControl = Picture1
    Timer1.Enabled = True
    End Sub
    
    Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Set ActControl = Picture2
    Timer1.Enabled = True
    End Sub
    
    Private Sub Timer1_Timer()
    
    Dim pt As POINTAPI
    
    If ActControl Is Nothing Then
        Timer1.Enabled = False
        Exit Sub
    End If
    
    On Error Resume Next
    
    GetCursorPos pt
    
    If WindowFromPoint(pt.X, pt.Y) = ActControl.hWnd Then
        ActControl.Picture = Image1.Picture
    Else
        ActControl.Picture = Image2.Picture
        Timer1.Enabled = False
        Set ActControl = Nothing
    End If
    
    End Sub
    Boolean

  9. #9
    Ciao Artemio, ti conviene usare il codice di Boolean perchè ti rende migliore la gestione (te lo avevo scritto che lo scrivevo sul momento..): forse puoi usare ciò che ti ho postato per capire come si usa quella funzione API..

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.