Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 16 su 16

imposta Forecolor e Backcolor di casella di testo al passaggio del mouse

  1. #11
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Si può fare ma è una menata...
    Su ogni controllo puoi chiamare una funzione alla quale passi il nome del controllo stesso... ma devi farlo a mano.

    Studia l'esempio che ti ho suggerito... quello è il metodo.
    ℹ️ Leggi di più su @Alex ...

  2. #12
    angelo_dima non è in linea Novello
    Continua a non funzionare, cioè nel mousemove del textbox funziona mi cambia il colore ma nel mousemove del corpo non succede nulla e nel textbox rimane il colore che ha cambiato precedentemente, inoltre devo dire che io utilizzo un solo modulo generale dove ho tutte le function e le sub genrali senza option explicit , sicuramente per errore, ma ormai dopo un po di tempo molte variabili non sono dichiarate ma vengono impostate al momento senza una DIM quindi la variabile da te consigliata actcontrol, diversamente dalla tua indicazione l'ho dichiarata così:

    Public actControl As Access.TextBox

    per il resto ho seguito i tuoi consigli, questo è il mio codice attuale:

    Private Sub Corpo_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If actControl Is Nothing Then Exit Sub
    If actControl.BackColor = vbCyan Then
    actControl.BackColor = vbWhite
    End If
    Set actControl = Nothing
    End Sub

    Private Sub ID_IMO_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Me!ID_IMO.BackColor = vbWhite Then
    Me!ID_IMO.BackColor = vbCyan
    Set actControl = Me!ID_IMO
    Else
    Set actControl = Nothing
    End If
    End Sub

    ammetto i miei limiti ma sto impazzendo e non riesco a capire
    scusami

  3. #13
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Il codice non va in un modulo ma nel modulo della form... tutto lì dentro... quindi non ha senso la modifica che hai fatto.
    Poi devi studiare su qualche libro come funziona l'interfaccia di Access, altrimenti non capirai mai perché è come deve essere usato Option Explicit.
    Domani ci guardo meglio magari mi è sfuggito qualche cosa, tuttavia devi abituarti a fare debug ed a fornire elementi di test che aiutano...
    Nella sezione articoli trovi un mio tutorial su come si fa debug.
    ℹ️ Leggi di più su @Alex ...

  4. #14
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Intanto il codice che ti avevo suggerito lo devi ripristinare, e l'errore che giustifica il fatto non funzionasse è in questa Routine, dove ho rimosso il reset dello stato attivo:
    Private Sub ID_IMO_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Me!ID_IMO.BackColor = vbWhite Then
            Me!ID_IMO.BackColor = vbCyan
            Set actControl = Me!ID_IMO
        End If
    End Sub
    
    Detto questo, ti mostro l'esempio semplificato di una classe ed il codice necessario nella Maschera.
    L'esempio richiede che sulle TextBox oggetto dell'effetto sia impostata la proprietà TAG="X".
    La Classe devi chiamarla [cOver], questo oggetto ha tutto il codice necessario per gestire sia l'effetto OVER che settare nella Form, il riferimento alla classe attiva, per consentirne il Reset.

    Codice della Classe
    Option Compare Database
    Option Explicit
    
    Private WithEvents mControl     As Access.TextBox
    Private mParent                 As Access.Form
    Private mActiveColor            As Long
    Private mNormalColor            As Long
    
    Public Property Set Control(pControl As Access.TextBox)
        Set mControl = pControl
        Set mParent = mControl.Parent
        mControl.OnMouseMove = "[Event Procedure]"
    End Property
    Public Property Get Control() As Access.TextBox
        Set Control = mControl
    End Property
    
    Public Property Let StateActive(Value As Boolean)
        If Value Then
            mControl.BackColor = mActiveColor
        Else
            mControl.BackColor = mNormalColor
        End If
    End Property
    Public Property Get StateActive() As Boolean
        StateActive = (mControl.BackColor = mActiveColor)
    End Property
    
    Private Sub mControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If mControl.BackColor = mNormalColor Then
            StateActive = True
            mParent.SetActive Me
        End If
    End Sub
    
    Private Sub Class_Initialize()
        mActiveColor = vbCyan
        mNormalColor = vbWhite
    End Sub
    
    Codice nella Form
    Option Compare Database
    Option Explicit
    
    Private mColl           As Collection
    Private actControl      As cOver
    
    Private Sub Form_Load()
        Dim mC      As cOver
        Dim ctl     As Access.Control
        
        Set mColl = New Collection
        For Each ctl In Me.Controls
            If ctl.ControlType = acTextBox Then
                If ctl.Tag = "X" Then
                    Set mC = New cOver
                    Set mC.Control = ctl
                    mColl.Add mC
                End If
            End If
        Next
    End Sub
    
    Private Sub Corpo_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If actControl Is Nothing Then Exit Sub
        If actControl.StateActive Then
            actControl.StateActive = False
            SetActive Nothing
        End If
    End Sub
    
    Public Function SetActive(pOver As cOver)
        Set actControl = pOver
    End Function
    
    Private Sub Form_Unload(Cancel As Integer)
        If Not mColl Is Nothing Then Set mColl = Nothing
        If Not actControl Is Nothing Then Set actControl = Nothing
    End Sub
    
    Quì trovi l'esempio funzionante:TextOver.zip
    Ultima modifica di @Alex; 01-06-2021 08:58 
    ℹ️ Leggi di più su @Alex ...

  5. #15
    angelo_dima non è in linea Novello
    grazie infinite ad @alex, in effetti sono piuttosto carente in molti elementi basici della programmazione di Access e solitamente non utilizzo option Explicit ne il debug, cercherò di approfondire dal tuo articolo riguardo soprattutto per il debug, tornando all'esempio sopra sono riuscito ad adattarlo e funziona però ci sono due problemi uno è che alcune textbox, sembra a caso, dopo un po che muovo il mouse nella maschera rimangono colorate e non si resettano, inoltre vorrei fare lo stesso con i controlli combobox presenti nella maschera ma per questi posso provare a implementare le modifiche partendo dai tuoi suggerimenti per le textbox.
    di nuovo grazie

  6. #16
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Per gestire più Type si fa uso del MultiCast... di cui trovi esempio quì:
    https://masterdrive.it/microsoft-acc...-classe-18577/
    Infondo ci sono dei DEMO, quello che vedi indicato così:

    Aggiunto 10Dic2013
    GEN_MULTICAST_MASTER.zip

    Ovviamente non è la programmazione di base, ma leggermente più evoluta quindi va studiata.
    ℹ️ Leggi di più su @Alex ...

+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12

Potrebbero interessarti anche ...

  1. Risposte: 4
    Ultimo Post: 16-06-2014, 10:10
  2. Testo a comparsa al passaggio del mouse
    Da ErPiotta nel forum HTML, CSS e JavaScript
    Risposte: 4
    Ultimo Post: 22-04-2013, 15:40
  3. Risposte: 3
    Ultimo Post: 07-06-2012, 19:42
  4. TextBox.BackColor & TextBox.ForeColor
    Da Luca Cannavò nel forum Visual Basic .Net
    Risposte: 16
    Ultimo Post: 22-08-2011, 12:33
  5. Risposte: 1
    Ultimo Post: 31-03-2008, 22:00