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