VB6 + WINDOWS 10 ? BACKCOLOR TITLE BAR FORM
Achei em algum lugar uma forma de altertar a cor da barra de título dos forms, no entanto, o borderstyle dele precisa ser 0 (none) para funcionar, aí o botão de fechar do form não funciona.
Alguém sabe alguma forma de alterar a cor da barra de títulos de um form no Windows 10 ?
código que uso
mSYS_cf = SetSysColors(1, COLOR_CAPTIONTEXT, vbWhite)
Declare Function SetSysColors Lib "user32" _
(ByVal nChanges As Long, lpSysColor As _
Long, lpColorValues As Long) As Long
Public Const COLOR_CAPTIONTEXT = 9
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const GWL_STYLE = -16
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1
Private Sub Form_Load()
' Altera a cor da barra de título para vermelho
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU
SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEY
End Sub
https://leandroascierto.com/blog/barra-de-titulo-personalizada/
Testei o exemplo com Windows 11, 64 bits, tudo ok!
Aproveitando: o site tem muita informação e muita informação interessante
vale a pena dar uma olhada.
https://www.vbforums.com/showthread.php?888052-The-titlebar-with-different-colors
Citação:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const GWL_STYLE = -16Private Const WS_CAPTION = &HC00000Private Const WS_SYSMENU = &H80000Private Const WS_EX_LAYERED = &H80000Private Const LWA_COLORKEY = &H1Private Sub Form_Load() ' Altera a cor da barra de título para vermelho SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEYEnd Sub
Funcionou parcialmente, somente a cor branca.
Muito obrigado.
Citação:Oi, veja se atende, bem mais complexo:https://leandroascierto.com/blog/barra-de-titulo-personalizada/Testei o exemplo com Windows 11, 64 bits, tudo ok!Aproveitando: o site tem muita informação e muita informação interessantevale a pena dar uma olhada.
Esse site é sensacional, não o conhecia. Obrigado pela recomendação.
A classe que o camarada desse site colocou funciona bem.
Citação:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const GWL_STYLE = -16Private Const WS_CAPTION = &HC00000Private Const WS_SYSMENU = &H80000Private Const WS_EX_LAYERED = &H80000Private Const LWA_COLORKEY = &H1Private Sub Form_Load() ' Altera a cor da barra de título para vermelho SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEYEnd Sub
No, win11 não funciona ....
O sistema ficou "pesado", lento. O show modal 1 não funciona. Após muitos testes, abandonei a ideia.
Seguindo a sugestão de um usuário de outro fórum, eu mesmo fiz a barra de título do jeito que eu queria, contornei alguns inconvenientes como o form.move, e ficou muito elegante.
Gostei do resultado.
Grato pela contribuição de todos
Citação:Ficou bacana, como vc fez ?, passa o link desse fórum q vc usou. Nos meus forms, eu deixo sem bordar e coloco uma imagem imitando a borda superior, mas perco a função de minimizar e fechar
Não sei se posso divulgar outros fóruns aqui, mas foi lá no scriptbrasil (se puder, eu compartilho o link aqui)
Fiz na unha igual você rs Usei labels, frames e chamaleonButton para os botões de fechar e minimizar.
Ajustei o form_move em um módulo e só copio a barra para os demais forms, prático.
Mas a dor de cabeça continua. Se usar o form.borderstyle = 0 e o Menupopup, dá ruim, a Titlebar aparece inevitavelmente.
Estou tentando achar outra solução para o menu right click agora, não tem como usá-lo.
É o preço que se paga por não ter atualizado a linguagem né
Não consegui posicionar o objeto que substituiria o menupopup de acordo com a posição do mouse.
Vida que segue...