MUDAR IMAGEM DE FUNDO NOS EVENTOS DO MOUSE

MARSOLIM 30/03/2014 18:06:39
#436696
pessoal estou com problemas para mudar uma imagem de fundo nos eventos Enter, Leave, Down e Up do mouse. eu tenho um botão de play/pause e tenho seis imagens

play_normal
play_emcima
play_apertado
pause_normal
pause_emcima
pause_apertado

como devem ter notado eu quero alterar para as devidas imagens nos devidos eventos. no Load do form coloco a imagem play_normal. o que preciso?

* quando colocar a seta do mouse em cima - se a imagem que estiver no botão for a play_normal, passar para a play_emcima e se for a pause_normal passar para a pause_emcima

* quando tirar a seta de cima do botão - se a imagem do botão for a play_emcima passar para a play_normal e se for a pause_emcima passar para a pause_normal

* quando apertar o mouse - se a imagem do botão for a play_emcima passar para a play_apertado e se for a pause_emcima passar para a pause_apertado

* quando soltar o mouse - se a imagem do botão for a play_apertado passar para a pause_emcima e se for a pause_apertado passar para a play_emcima

criei uma sub e chamo ela nos eventos

    Sub mImage(ByVal ctl As Button, ByVal imgUm As String, ByVal imgDois As String, ByVal imgTres As String)
If ctl.BackgroundImage Is My.Resources.ResourceManager.GetObject(imgUm.ToString) Then
ctl.BackgroundImage = My.Resources.ResourceManager.GetObject(imgDois.ToString)
Else
ctl.BackgroundImage = My.Resources.ResourceManager.GetObject(imgTres.ToString)
End If
End Sub

Private Sub playpause_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles playpause.MouseDown
Call mImage(Me.playpause, [Ô]play_emcima[Ô], [Ô]pause_apertado[Ô], [Ô]play_apertado[Ô])
End Sub

Private Sub playpause_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles playpause.MouseEnter
Call mImage(Me.playpause, [Ô]pause_normal[Ô], [Ô]pause_emcima[Ô], [Ô]play_emcima[Ô])
End Sub

Private Sub playpause_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles playpause.MouseLeave
Call mImage(Me.playpause, [Ô]pause_emcima[Ô], [Ô]pause_normal[Ô], [Ô]play_normal[Ô])
End Sub

Private Sub playpause_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles playpause.MouseUp
Call mImage(Me.playpause, [Ô]play_apertado[Ô], [Ô]play_emcima[Ô], [Ô]pause_emcima[Ô])
End Sub


bem o que acontece é que quando a imagem é play_normal e eu coloco a seta do mouse em cima e tiro funciona certinho mas quando é pause_normal já não está dando. quando a imagem é play_emcima e eu aperto e solto o mouse funciona certinho mas quando está no pause_emcima já não funciona. já tentei muita coisa diferente como por exemplo sem a sub ou seja repetindo tudo dentro de cada evento e já tentei várias mudanças de ordem nos nomes das imagens e tambem não foi.

PERGUNTA 1: alguem sabe o que pode estar errado no meu código e o que tenho que alterar?

Eu pensei tambem em criar uma variável tipo string e mudar o texto dela de acordo o evento e colocar um timer com intervalo de 1 milésimo de segundo que ia monitorar essa variável e mudar a imagem de acordo o texto dela.

PERGUNTA 2: se não tiver como resolver no esquema anterior um timer com esse intervalo ia consumir muitos recursos do pc?

agradeço desde agora.
MARSOLIM 31/03/2014 10:00:07
#436702
acho que sei o que está acontecendo. acho que a forma que estou tentando obter o nome da imagem que está no botão não é a correta. então será que alguem consegue me dar uma dica de como obter o nome da imagem do botão? percorri as dependencias e subdependesicas do me.nomedobotão. e me.nomedobotão.backgroundimage. mas não consegui achar uma que me retornasse o nome da imagem.

no momento resolvi criando uma variável que dei o nome de nome_bt e no load do form coloco [txt-color=#0000f0]nome_bt = [Ô]play[Ô] [/txt-color]e uso o valor de nome_bt no lugar do nome da imagem do botão. no clique do botão mudo o valor de nome_bt entre [Ô]play[Ô] e [Ô]pause[Ô] e alterei a função para

    Sub mImage(ByVal ctl As Button, ByVal imgUm As String, ByVal imgDois As String, ByVal imgTres As String)
If nome_bt = imgUm Then
ctl.BackgroundImage = My.Resources.ResourceManager.GetObject(imgDois.ToString)
Else
ctl.BackgroundImage = My.Resources.ResourceManager.GetObject(imgTres.ToString)
End If
End Sub


e nas chamadas

    Private Sub playpause_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles playpause.MouseDown
Call mImage(Me.playpause, [Ô]play[Ô], [Ô]play_apertado[Ô], [Ô]pause_apertado[Ô])
End Sub

Private Sub playpause_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles playpause.MouseEnter
Call mImage(Me.playpause, [Ô]play[Ô], [Ô]play_emcima[Ô], [Ô]pause_emcima[Ô])
End Sub

Private Sub playpause_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles playpause.MouseLeave
Call mImage(Me.playpause, [Ô]play[Ô], [Ô]play_normal[Ô], [Ô]pause_normal[Ô])
End Sub

Private Sub playpause_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles playpause.MouseUp
Call mImage(Me.playpause, [Ô]play[Ô], [Ô]play_emcima[Ô], [Ô]pause_emcima[Ô])
End Sub


assim está a funcionar como precisa que funcione.

mas ainda estou querendo saber como se faz para obter o nome da imagem de fundo do botão imagem essa que está no My.Resources. Fritei os miolos tentando e pesquisando e tentando e não encontrei uma forma de se fazer isso. se alguem já conseguiu e puder compartilhar seria muito bom.
Tópico encerrado , respostas não são mais permitidas