Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto x evidenziazione pulsanti

Ciao e innanzitutto chiedo scuso anticipatamente nel caso in cui si fosse
già parlato di tale argomento nel ng e pertanto chiedo cmq di poter essere
aiutato.
Il problema che sto per esporre da me è già stato affrontato, ma il
risultato non è stato del tutto soddisfacente pertanto voglio cercare di
migliorarlo con l'aiuto di qualcuno!
Ho un form con n pulsanti e voglio creare un effetto evidenziazione
(cambiare il colore dello sfondo del pulsante)  al passaggio del mouse e
annullarlo non appena il mouse non è + sul pulsante.
Ho realizzato la cosa in questo modo:
- al caricamento del form che contiene i pulsanti ridimensiono una matrice
in cui metto (in ordine di indice crescente) i valori della proprietà hWnd
di ogni comando;
- nell'evento mousemove del pulsante (essendo una matrice di pulsanti)
cambio il colore dello sfondo del pulsante che ha valore hWnd uguale a
quello contenuto nella matrice all'indice corrispondente;
- in più ho aggiunto che all'inizio delle operazioni svolte nell'evento
mousemove mi riporta il colore dello sfondo di tutti i pulsanti a quello di
default.
Fin qui andrebbe quasi tutto bene, salvo evidenti sfarfallii dovuti ai
continui cambi di colore ad ogni spostamento del mouse su uno dei pulsanti
ed inoltre, in ultimo, ma non per questo meno importante, se mi sposto in
un'altra parte del form che non sia uno dei pulsanti mi resta l'ultimo
pulsante su cui il mouse si trovava, evidenziato.
Chiedo quindi una mano o a risolvere il tutto con il metodo che io ho
cominciato ho cmq gradirò cmq un altro metodo che magari risulti anche +
semplice e leggero....
P.S.: L' evidenziazione non per forza deve essere il cambio di colore dello
sfondo!!
Anticipatamente grazie!

 ha scritto

avevo provato con label e txtbox, il concetto dovrebbe essere simile. se
invece dei command usi dei label, puoi gestire anche il forecolor, che seno'
salvo capriole dipende dai colori di sistema.
il form di sotto e' giallo, ma puo' essere quello che vuoi, con due array di
6 lbl e 6 txt.
per azzerarli tutti, puoi distanziarli un minimo gestendo il mousemove sul
form.
lo sfarfallio non so se sia evitabile.
--
ciao, j.
www.sundaysw.com
Option Explicit
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
    Dim j As Integer
    For j = 0 To 5
            Label1(j).BorderStyle = 0
            Label1(j).BackColor = vbYellow
            Label1(j).ForeColor = vbBlack
            Label1(j) = "label1"
            Text1(j).BorderStyle = 0
            Text1(j).BackColor = vbYellow
            Text1(j).ForeColor = vbRed
            Text1(j) = "text1"
    Next
End Sub
Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As
Integer, X As Single, Y As Single)
    Dim j As Integer
    For j = 0 To 5
        If j = Index Then
            Label1(j).BorderStyle = 1
            Label1(j).BackColor = vbBlack
            Label1(j).ForeColor = vbYellow
            Label1(j) = "IN EVIDENZA"
        Else
            Label1(j).BorderStyle = 0
            Label1(j).BackColor = vbYellow
            Label1(j).ForeColor = vbBlack
            Label1(j) = "label1"
        End If
    Next
End Sub
Private Sub Text1_MouseMove(Index As Integer, Button As Integer, Shift As
Integer, X As Single, Y As Single)
    Dim j As Integer
    For j = 0 To 5
        If j = Index Then
            Text1(j).BorderStyle = 1
            Text1(j).BackColor = vbRed
            Text1(j).ForeColor = vbYellow
            Text1(j) = "IN EVIDENZA"
        Else
            Text1(j).BorderStyle = 0
            Text1(j).BackColor = vbYellow
            Text1(j).ForeColor = vbRed
            Text1(j) = "text1"
        End If
    Next
End Sub

 semplice e leggero....
il 13/06/2002 il buon zanna aveva dato questo link
http://groups.google.it/groups?hl=it&group=it.comp.lang.visual-basic
cerca "faq" "mouseover" (senza virgolette)
bye by luigi

 Anticipatamente grazie!
IMHO hai affrontato il problema sbagliano parzialmente l'analisi.
Per ottenere l'effetto che vuoi tu non serve utilizzare hWnd del controllo,
se hai una matrice basta che nell'evento MouseMove fai sostituire il colore
di fondo del controllo con l'idice attivo:
Es (fatto a mano):
Public Sub Button_MouseMove(Index as long)
    Button(indice).backcolor=xxxx
End Sub
Poi inserisci nell'evento MouseMove della form il reset di tutti i backcolor
dei pulsanti, o ancora meglio ti salvi l'indice del controllo che hai
modificato in una variabile pubblica e nell'evento mousemove della form
resetti il colore di quel controllo. Eviti sfarfallamenti, più o meno, e non
ti complichi la vita. Se poi vuoi otimizzare ancora meglio il tutto nel
MouseMove dei pulsanti un if che va a determinare se il controllo non è
ancora stato modificato e lo modifichi, altrimenti non fai nulla (che
graficamente è pure meglio).
Unica cosa non mettere i controlli l'uno attaccato all'altro altrimenti non
si scatena l'enevto mousemove della form è ti si scombina tutto.
P.S. = Spero di essere stato chiaro... sto lavorando sotto pressione e a 35
gradi.. :-(
--
Ciao
   Sharkman
-----------------------------
Rimuovere NOSPAM per risposte

 gradi.. :-(
coraggio, quando arrivi a 100 dovrebbe attivarsi la valvola.
j.celsius

 j.celsius
Perņ devi assicurarti che non ci sia nessuno vicino
quando arrivi a 90.
Pap.Porn

 aiutato.
Il mitico Roal Zanazzi postò questo nel '99:
http://groups.google.com/groups?selm=78ffj5%24nsb%242%40hermes.iol.it
dovresti poterlo adattare per quello che ti serve.
Bye, G.

"Paperino" <non...@lo.dico> ha scritto

fa paura, eh ?
j.bingo

 ha scritto nel messaggio
news:afcpi9$cvq40$1...@ID-51318.news.dfncis.de...

Su questa ultima battuta... No comment :-P
LOL


 ha scritto nel messaggio
news:5sjS8.70924$j65.1...@twister1.libero.it...
