Notifications
Clear all

Vba com o ícone personalizado.

3 Posts
2 Usuários
0 Reactions
1,431 Visualizações
(@bracinho)
Posts: 69
Trusted Member
Topic starter
 

Pessoal, boa tarde!

Há muito tempo atrás, com a ajuda de vocês, mais especificamente com o exemplo postado pelo o Mauro Coutinho, eu fiz com que o meu projeto substitui-se o ícone padrão do Excel, por um ícone realizado por mim.

O API desse exemplo funciona perfeitamente, porém só na parte superior do projeto, observem:

A minha intenção sempre foi fazer com que ele substituísse também o ícone que fica na barra de tarefas, mas isso eu nunca consegui.

Mas, não sei por qual motivo, hoje deu certo! ou seja, o ícone da barra de tarefas também foi alterado, vide abaixo:

A pergunta é: como faço para o API sempre alterar os dois ícones em questão?

Vejam o código que eu utilizo:

o módulo nomeado como: modApiIcone

Option Explicit

'As instruções abaixo conteem as APIs e teem de estarem em um MÓDULO separado

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long

Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Const WM_SETICON = &H80
Const ICON_SMALL = 0&
Const ICON_BIG = 1&

Public Sub ChangeXLIcon(Optional ByVal hIcon As Long = 0&)
Dim hWnd As Long
Dim lngRet As Long
'Get the handle of Excel application
hWnd = FindWindow("XLMAIN", Application.Caption)
lngRet = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
lngRet = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
lngRet = DrawMenuBar(hWnd)
End Sub

No Active da Userform:

Private Sub UserForm_Activate()


Set nAtualizaForm.Form = Me

     hIcone = Image2.Picture.Handle
'a imagem que tem o ícone


        Form_Personalizado = FindWindowA(vbNullString, Me.Caption)
        Call ExibirÍcone(Form_Personalizado, FOCO_ICONE, ICONE, ByVal hIcone)
            
            Set mclsFormChanger = New CFormChanger
            Set mclsFormChanger.Form = Me
            
            mclsFormChanger.ShowTaskBarIcon = True
            
      
End Sub

E na userform vai esse código também:

'icone

Private Declare Function ExibirÍcone Lib "user32" Alias "SendMessageA" ( _
            ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
            lParam As Any) As Long

Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
' o termo FindWindwA não pode ser alterado

'// Constante do Ícone
Private Const FOCO_ICONE = &H80
Private Const ICONE = 0&

Dim Form_Personalizado As Long
Dim hIcone As Long

Dim mclsFormChanger As CFormChanger

Não sei se está faltando alguma parte dos códigos, mas já da para vocês saberem de qual exemplo refiro-me.

 
Postado : 29/09/2015 10:45 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Lorenzon, se a rotina alterava o icone do form e agora só o da barra, precisa ver o que você alterou e incluir a linha que trocava o do form.

Acredito que você deve ter pego os exemplos no forum do Tomas :
Alterar Icone Barra Titulo Excel - http://www.tomasvasquez.com.br/forum/vi ... gvJY0aXtkY
Userform com icone próprio (RESOLVIDO) - http://www.tomasvasquez.com.br/forum/vi ... gvNbEaXtkY

Veja, este recurso utilizam APis que dependendo da versão do excel podem ter efeitos diferentes, eu parei de utilizar este recurso devido que em algumas máquinas funcionavam outras não, então tem de procurar por bibliotecas compatíveis e quando vieram as versões 64 bits piorou.
Um exemplo disto é o seu caso que passou a funcionar de uma hora para outra, mas a questão seria, porque passou a funcionar ? Teria sido devido a alguma atualização do sistema operacional ? ou atualização de algum pacote do office ?
Já testou em outras máquinas se o efeito funciona tambem ?
Eu baixei novamente os exemplos que indiquei e não funcionou no pc aqui, não da mensagem de erro mas não altera os icones.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/09/2015 6:04 am
(@bracinho)
Posts: 69
Trusted Member
Topic starter
 

Mauro,

O meu exemplo de fato foi baixado do link que você disse:

Alterar Icone Barra Titulo Excel - http://www.tomasvasquez.com.br/forum/vi%20...%20gvJY0aXtkY

Em todas as máquinas que executei o meu projeto via Excel 2007, 2010 e 2013 ele sempre alterou o ícone do Form.

O que aconteceu é que, inesperadamente, ele alterou os dois ícones (form e barra).

Será que não existe um outro API que faça isso?

 
Postado : 01/10/2015 12:28 pm